美文网首页
你见过却不知道的UIMenuController

你见过却不知道的UIMenuController

作者: 云天大侠_general | 来源:发表于2017-02-18 18:49 被阅读22次

    你见过却不知道的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

    相关文章

      网友评论

          本文标题:你见过却不知道的UIMenuController

          本文链接:https://www.haomeiwen.com/subject/mjpqkttx.html