• iOS-UIMenuController使用


    UIMenuController演示

    要想在你的view或者viewController中实现长按弹出菜单栏你必须要调用becomeFirstResponder方法,其次要实现canBecomeFirstResponder方法,并返回YES.

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property(nonatomic,strong)UILabel *label;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
        
        _label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 200, 50)];
        _label.text = @"我是一个label";
        _label.textAlignment = NSTextAlignmentCenter;
        _label.textColor = [UIColor blackColor];
        _label.userInteractionEnabled = YES;
        //添加长按手势
        [_label addGestureRecognizer:[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]];
        [self.view addSubview:_label];
    }
    
    -(void)longPress:(UILongPressGestureRecognizer *)sender{
        if (sender.state == UIGestureRecognizerStateBegan) {
            [self.view becomeFirstResponder];
            _label.backgroundColor = [UIColor lightGrayColor];
            UIMenuController *menu = [UIMenuController sharedMenuController];
            //复制
            UIMenuItem *copyItem = [[UIMenuItem alloc] initWithTitle:@"复制" action:@selector(copyItemClicked:)];
            //收藏
            UIMenuItem *collectItem = [[UIMenuItem alloc] initWithTitle:@"收藏" action:@selector(collectItemClicked:)];
            //举报
            UIMenuItem *reportItem = [[UIMenuItem alloc] initWithTitle:@"举报" action:@selector(reportItemClicked:)];
            menu.menuItems = @[copyItem,collectItem,reportItem];
            [menu setMenuVisible:YES animated:YES];
            [menu setTargetRect:_label.frame inView:self.view];
        }
        if (sender.state==UIGestureRecognizerStateEnded) {
            _label.backgroundColor = [UIColor clearColor];
        }
    }
    
    - (void)copyItemClicked:(UIMenuItem *)item{
        NSLog(@"复制");
    }
    
    - (void)collectItemClicked:(UIMenuItem *)item{
        NSLog(@"收藏");
    }
    
    - (void)reportItemClicked:(UIMenuItem *)item{
        NSLog(@"举报");
    }
    
    - (BOOL)canBecomeFirstResponder{
        return YES;
    }
    
    // 有些控件会有系统的UIMenuItem,使用此方法筛选
    - (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
      /*
      if (action == @selector(xxxxx)) {
        return YES;
      }
      return NO;
      */
      return YES;
    }
    

    注意

    • 显示UIMenuController前必须调用becomeFirstResponder
    • 必须重写canBecomeFirstResponder方法返回YES
    • 有些控件会有系统的UIMenuItem,使用canPerformAction:withSender:方法筛选出需要的item
  • 相关阅读:
    Python 爬虫入门(一)
    Dubbo、Zookeeper集群搭建及Rose使用心得(二)
    Dubbo、Zookeeper集群搭建及Rose使用心得(一)
    JAVA 加密算法初探DES&AES
    Android 蓝牙模块基础操作
    IntelliJ IDEA 使用随笔
    Maven+SSM框架实现简单的增删改查
    记录一次bug解决过程:数据迁移
    SSM框架+Plupload实现断点续传(Spring+SpringMVC+MyBatis+Plupload)
    JAVA开发环境
  • 原文地址:https://www.cnblogs.com/lancely/p/5782741.html
Copyright © 2020-2023  润新知