iOS UIMenuController使用(长按菜单)

  • 初始化UIMenuItem
    UIMenuItem *one = [[UIMenuItem alloc] initWithTitle:@"复制"action:@selector(menuOne:)];
    UIMenuItem *two = [[UIMenuItem alloc] initWithTitle:@"删除"action:@selector(menuTwo:)];
    UIMenuItem *three = [[UIMenuItem alloc] initWithTitle:@"转发"action:@selector(menuThree:)];
  • 初始化UIMenuController
    UIMenuController *menu = [UIMenuController sharedMenuController];
    //菜单箭头方向
    menu.arrowDirection = UIMenuControllerArrowDefault;
    //添加Item内容
    [menu setMenuItems:[NSArray arrayWithObjects:one, two, three, nil]];
    //设置位置与添加视图(可以给cell的frame)
    [menu setTargetRect:CGRectMake(100, 100, 100, 20) inView:self.view];
    //显示菜单MenuVisible:并且带动画animated:
    [menu setMenuVisible:YES animated:YES];
  • 还有最关键的一点添加此方法
- (BOOL)canBecomeFirstResponder
{    
    return YES;   
}
  • 实现方法
- (void)menuOne:(id)sender{
    NSLog(@"复制");
}
- (void)menuTwo:(id)sender{
    NSLog(@"删除");
}
- (void)menuThree:(id)sender{
    NSLog(@"转发");
}
  • 完整代码
//定义一个开关isOpen
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    //返回与当前接收者有关的所有的触摸对象
    NSSet *allTouches = [event allTouches];
    //视图中的所有对象
    UITouch *touch = [allTouches anyObject];
    //返回触摸点在视图中的当前坐标
    CGPoint point = [touch locationInView:[touch view]];

    UIMenuItem *one = [[UIMenuItem alloc] initWithTitle:@"复制"action:@selector(menuOne:)];
    UIMenuItem *two = [[UIMenuItem alloc] initWithTitle:@"删除"action:@selector(menuTwo:)];
    UIMenuItem *three = [[UIMenuItem alloc] initWithTitle:@"转发"action:@selector(menuThree:)];

    UIMenuController *menu = [UIMenuController sharedMenuController];
    //菜单箭头方向(默认会自动判定)
    menu.arrowDirection = UIMenuControllerArrowDefault;
    //添加内容
    [menu setMenuItems:[NSArray arrayWithObjects:one, two, three, nil]];
    //设置位置
    [menu setTargetRect:CGRectMake(point.x, point.y, 0, 0) inView:self.view];
    //显示菜单并且带动画
    [menu setMenuVisible:!isOpen animated:YES];
    isOpen = !isOpen;
}

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)menuOne:(id)sender{
    NSLog(@"复制");
}
- (void)menuTwo:(id)sender{
    NSLog(@"删除");
}
- (void)menuThree:(id)sender{
    NSLog(@"转发");
}

预览效果


4B648165-B8A7-4BB0-A018-312CD202D45D.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,752评论 0 15
  • 需求:在内网环境下不使用百度API加载地图 解决: 1. 思路:新建script标签,利用他的src属性加载地图,...
    丘比特爱上猫阅读 3,359评论 0 1
  • 忙碌又清闲的生活中似乎给了我新的课题 在这个近乎于饱和的生活中 我们一直在为自己的思想不停的寻找着出路 时时刻刻想...
    方阳普阅读 2,166评论 5 4
  • (心理学学习笔记,第一篇) 人长大了,就要独立了。 独立的意思是不依赖,为了更好地理解独立,先要理解什么是依赖。 ...
    一剑飘香999阅读 3,459评论 3 2

友情链接更多精彩内容