你见过却不知道的UIMenuController

2017-02-18  本文已影响22人  云天大侠_general

你见过却不知道的UIMenuController

前言:最近一段时间都在做项目,写博客很少,这几天会把项目中遇到的一些小知识点总结分享给大家.

先看一下图,苹果自带的UIMenuController都在什么地方

UITextFiled

UITextFiled.png

UITextView

UITextView.png

UIWebView

UIWebView.png

由以上3张图可以看出UITextFiled,UITextView,UIWebView,在这几个控件上点击时都能够弹出UIMenuController,以便我们实现拷贝,粘贴等功能, 但我们在实际开发过程中有可能有这样的需求,如下图

cell.png

大家都知道, cell不具备以上功能的,需要我们自己实现这种需求,下面为了方便演示,我对前三张图片中的UILable实现上述功能.

要让UILable实现上述功能我们需要对UILable进行重写,代码如下;

#import"ZHLable.h"@implementationZHLable- (void)awakeFromNib{// 给lable添加手势[selfaddGestureRecognizer:[[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(labelClick)]];}/**

*  label可以成为第一响应者

*/- (BOOL)canBecomeFirstResponder{returnYES;}/**

*  监听label点击

*/- (void)labelClick{// 成为第一响应者[selfbecomeFirstResponder];// 弹出MenuControllerUIMenuController*menu = [UIMenuControllersharedMenuController];// 设置显示的范围//    [menu setTargetRect:self.bounds inView:self];[menu setTargetRect:self.frameinView:self.superview];    [menu setMenuVisible:YESanimated:YES];}/**

*  这个方法决定了MenuController的菜单项内容

*  返回YES,就代表MenuController会有action菜单项

*/- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{if(action ==@selector(cut:)        || action ==@selector(copy:)        || action ==@selector(paste:))returnYES;returnNO;}#pragma mark - 菜单点击处理- (void)cut:(UIMenuController*)menu{// 将当前label的文字设置到粘贴板[UIPasteboardgeneralPasteboard].string=self.text;// 清空文字self.text=nil;}- (void)copy:(UIMenuController*)menu{// 将当前label的文字设置到粘贴板[UIPasteboardgeneralPasteboard].string=self.text;}- (void)paste:(UIMenuController*)menu{// 将粘贴板的文字设置到当前label上self.text= [UIPasteboardgeneralPasteboard].string;}@end

OK,这样我们实现了上述功能, 如下图:

lable.png

上述实现过程也不是很难,关键是大家需要知道有这个功能,当项目有这样的需求知道怎么做就行

注: 上面整个示例过程可能对于初学者可能还存在以下问题

(一)语言问题:

语言问题.png

解决方法:

语言解决.png

(二)UILable默认不能与用户交互

@property(nonatomic,getter=isUserInteractionEnabled)BOOLuserInteractionEnabled;// default is NO

解决方法:

1⃣️

lable.userInteractionEnabled = YES;

2⃣️

交互.png

上一篇下一篇

猜你喜欢

热点阅读