美文网首页iOS点点滴滴
UIMenuController不能正常显示或消失

UIMenuController不能正常显示或消失

作者: 狗狗臭鸡蛋 | 来源:发表于2017-11-19 14:10 被阅读25次

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];
        }
    }

相关文章

网友评论

    本文标题:UIMenuController不能正常显示或消失

    本文链接:https://www.haomeiwen.com/subject/bsaevxtx.html