本文主要是介绍对UILabel添加UIMenuController扩展,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、UIMenuController认识
1、默认情况下,UITextView / UITextFiled / UIWebView 都有苹果自带的有UIMenuController功能
二、对UILabel添加UIMenuController扩展
1、新建一个SSCopyLabel,继承UIlabel,.m文件如下:
#import "SSCopyLabel.h"@implementation SSCopyLabel- (instancetype)initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if (self) {self.userInteractionEnabled = YES;UILongPressGestureRecognizer *touch = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];[self addGestureRecognizer:touch];}return self;
}-(void)handleTap:(UIGestureRecognizer*) recognizer {[self becomeFirstResponder];// 1.获得菜单 menuUIMenuController *menu = [UIMenuController sharedMenuController];// 2.设置菜单最终显示的位置[menu setTargetRect:self.frame inView:self.superview];UIMenuItem *menuItem = [[UIMenuItem alloc] initWithTitle:@"粘贴" action:@selector(pasteAction)];menu.menuItems = [NSArray arrayWithObjects:menuItem, nil];// 当label有内容的时候,再添加一个UIMenuItemif (self.text.length > 0) {UIMenuItem *menuItem1 = [[UIMenuItem alloc] initWithTitle:@"拷贝" action:@selector(copyAction)];menu.menuItems = [NSArray arrayWithObjects:menuItem, menuItem1, nil];}// 让UIMenuController显示出来,第二个参数不能直接写YES,否则会导致UIMenuController不断地闪烁[menu setMenuVisible:YES animated:!menu.isMenuVisible];
}- (void)pasteAction{UIPasteboard *pBoard = [UIPasteboard generalPasteboard];if (pBoard.string != nil) {self.text = pBoard.string;}
}- (void)copyAction{UIPasteboard *pBoard = [UIPasteboard generalPasteboard];pBoard.string = self.text;
}- (BOOL)canBecomeFirstResponder{return YES;
}
demo示例:
没内容的时候:
有内容的时候:
这篇关于对UILabel添加UIMenuController扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!