UIMenuController使用要点:
1. Menu所处的View必须实现 – (BOOL)canBecomeFirstResponder, 且返回YES
2. Menu所处的View必须实现 – (BOOL)canPerformAction:withSender,并根据需求返回YES或NO
3. 使Menu所处的View成为First Responder (becomeFirstResponder)
4. 实现UIMenuItem相应的使用方法
5. 定位Menu (- setTargetRect:inView:)
6. 展示Menu (- setMenuVisible:animated:)
首先给需要显示UIMenuController的对象(这里是cell)添加了长按事件,在初始化方法中添加即可。若对象本身长按时存在系统的UIMenuController(如UITextFiled\ UITextView\ UIWebView),即本身含有长按方法,那么只需在初始化方法中添加需要的UIMenuItem即可,无需添加长按方法。
UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPress:)];
[cell addGestureRecognizer:recognizer];
好,事件加上了,剩下的点击就是实现自定义剪贴板了,上代码:
- (void)longPress:(UILongPressGestureRecognizer *)recognizer{
if (recognizer.state ==UIGestureRecognizerStateBegan) {
CopyCell *cell = (CopyCell *)recognizer.view;
[cell becomeFirstResponder];
UIMenuItem *item1 = [[UIMenuItemalloc]initWithTitle:@"Flag"action:@selector(one:)];
UIMenuItem *item2 = [[UIMenuItemalloc]initWithTitle:@"Approve"action:@selector(two:)];
UIMenuItem *item3 = [[UIMenuItemalloc]initWithTitle:@"Deny"action:@selector(three:)];
UIMenuController *menu = [UIMenuControllersharedMenuController];
[menu setMenuItems:[NSArrayarrayWithObjects:item1,item2, item3, nil]];
[menusetTargetRect:cell.frame inView:cell];
[menu setMenuVisible:YESanimated:YES];
}
}
- (BOOL)canBecomeFirstResponder{
returnYES;
}
下面就是你所要使用的方法了
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if(action ==@selector(one:)){
return YES;
}
else if(action == @selector(two:)){
return YES;
}
else if(action == @selector(three:)){
return YES;
}
else return NO;
}
- (void)one:(id)sender {
// method
}
- (void)two:(id)sender {
// method
}
- (void)three:(id)sender {
// method
}