这段时间在集成使用融云聊天功能的时候,想自定义消息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 }