我在View Controller上有一个UITable和一个UITextView。我希望有一个自定义的UIMenuController,当我长按tableviewcell时我会选择'Copy'和'Info',我希望在UITextView的longpress上有默认的UIMenuController。
我搜索了一个解决方案,现在我可以创建一个自定义的UIMenuItem“信息”。但是,当我长按UITextView时,我看到也附加了“信息”。
如何仅为UITableView而不是UITextView设置自定义UIMenuController?我想在UITextView中单独使用默认选项。
答案 0 :(得分:0)
在这里稍晚,我也有同样的问题,默认的UIMenuController默认项目被添加到自定义项目作为整个应用程序的共享实例控件。
您应该将UITextView子类化并添加方法:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if ( action== @selector(yourMethodInfo:)) {
return NO; }
return YES;
}
也不要使用UIMenuController的sharedInstance并为Custom TextView子类创建一个单独的对象并使用它。从UITableView调用UIMenuController后,你应该执行[menuController setMenuItems:nil];
[menuController setMenuVisible:NO]; [menuController update]; menuController= nil;
在选择器方法上选择菜单项后。
如果有人需要更多参考资料让我知道,我可以提供更多解释。
答案 1 :(得分:0)
你的问题:
如何仅为UITableView而不是UITextView设置自定义UIMenuController?我想在UITextView中单独使用默认选项。
答案是:你不能
原因:您只能通过调用类方法获取UIMenuController实例:[UIMenuController sharedMenuController]
。请参阅Apple的文档:UIMenuController
如何解决问题:
设置自定义UIMenuItems nil当共享UIMenuController将隐藏时。
示例代码:
-(void)longPress:(UILongPressGestureRecognizer*)gesture {
//other stuff code...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMenuWillShowNotification:) name:UIMenuControllerWillShowMenuNotification object:nil];
}
-(void)handleMenuWillShowNotification:(NSNotification*)notification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillShowMenuNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleMenuWillHideNotification:) name:UIMenuControllerWillHideMenuNotification object:nil];
}
-(void)handleMenuWillHideNotification:(NSNotification*)notification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerWillHideMenuNotification object:nil];
UIMenuController *menuController = notification.object;
[menuController setMenuItems:nil];
}