UIMenuController 实现长按显示自定义菜单功能

这段时间在集成使用融云聊天功能的时候,想自定义消息cell的长按的菜单,在网上查了查,这是根据 UIMenuController 实现的。具体代码如下,我是使用一个btn实现的

首先创建一个btn,并给btn添加一个长按的事件

1 UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
2     [btn addGestureRecognizer:recognizer];

然后实现长按方法

注意,这个控件必须要实现几个方法

1、

[btn becomeFirstResponder];

2、

- (BOOL)canBecomeFirstResponder{

    return YES;

}

3、让该view处于可交互状态

具体代码如下

 1 - (void)longPress:(UILongPressGestureRecognizer *)recognizer{
 2     if (recognizer.state == UIGestureRecognizerStateBegan) {
 3         [btn becomeFirstResponder];
 4         UIMenuItem *flag = [[UIMenuItem alloc] initWithTitle:@"Flag"action:@selector(flag:)];
 5         UIMenuItem *approve = [[UIMenuItem alloc] initWithTitle:@"Approve"action:@selector(approve:)];
 6         UIMenuItem *deny = [[UIMenuItem alloc] initWithTitle:@"Deny"action:@selector(deny:)];
 7         UIMenuController *menu = [UIMenuController sharedMenuController];
 8         
 9         [menu setMenuItems:[NSArray arrayWithObjects:flag, approve, deny, nil]];
10         [menu setTargetRect:btn.frame inView:btn.superview];
11         [menu setMenuVisible:YES animated:YES];
12     }
13 }

下面再写出各个菜单点击的实现方法即可,非常简单。

 1 - (void)flag:(id)sender {
 2     
 3     NSLog(@"Cell was flagged");
 4     
 5 }
 6 - (void)approve:(id)sender {
 7     
 8     NSLog(@"Cell was approved");
 9 }
10 
11 - (void)deny:(id)sender {
12     
13     NSLog(@"Cell was denied");
14     
15 }
原文地址:https://www.cnblogs.com/zhanghuanan/p/5318498.html