UIMenuController 在调用 [menu setMenuVisible:YES animated:YES];
之后不显示,产生问题的原因可能是:
1、becomFirstResponder方法,使view或者viewController的self成为第一响应者,可以在相应文件的任意地方调用实现该方法,不过建议与UIMenuController放在一起。
比如在自定义的 label 中,添加自己的长按手势,在响应方法里面调用
[self becomeFirstResponder];
2、设置-(BOOL) canBecomeFirstResponder的返回值为YES,原因不言而喻。
- (BOOL)canBecomeFirstResponder {
return YES;
}
3、重载函数-(BOOL) canPerfomAction:(SEL)actionwithSender:(id)sender,设置要显示的菜单项,返回值为YES。若不进行任何限制,则将显示系统自带的所有菜单项(很多的,自己可以试一下),在此,只显示自定义的4项,即:
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {
if (action == @selector(menuItem1Pressed:) || action == @selector(menuItem2Pressed:)||
action == @selector(menuItem3Pressed:) || action ==@selector(menuItem4Pressed:)) {
returnYES;
}
returnNO;//隐藏系统默认的菜单项
}
4、系统 delegate 的 window 需要是 keywindow
UIWindow *window = [[UIApplication sharedApplication].delegate window];
if ([window isKeyWindow] == NO) {
[window becomeKeyWindow];
[window makeKeyAndVisible];
}
[self becomeFirstResponder];
或者可以在[menu setMenuVisible:YES animated:YES];后面加上
if (![menu isMenuVisible]) {
UIWindow *window = [[UIApplication sharedApplication].delegate window];
if ([window isKeyWindow] == NO) {
[window becomeKeyWindow];
[window makeKeyAndVisible];
[menu setMenuVisible:YES animated:YES];
}
}
网友评论