UIMenuController 在呈现后立即被解雇
Posted
技术标签:
【中文标题】UIMenuController 在呈现后立即被解雇【英文标题】:UIMenuController is getting dismissed immediately after being presented 【发布时间】:2015-09-25 14:42:02 【问题描述】:我已将 UIWebView 子类化以添加自定义 UIMenuController 功能,并且在 ios 9 之前它运行良好。我不确定发生了什么变化,但现在我遇到了一种情况,当我点击链接时,应该呈现菜单,菜单会短暂显示,但会被关闭(不再点击我)。
我很难弄清楚解雇的来源。我正在观察UIMenuControllerDidHideMenuNotification
通知,确实在菜单消失后立即调用,但我很难找到解雇的原因。
我知道可能潜伏着许多不同的问题,但我想知道是否有人以前经历过类似的事情?有没有办法以某种方式追踪解雇的原因?
【问题讨论】:
如果你能发布所有与显示/隐藏菜单控制器相关的代码,我们可以提供更多帮助。 我认为您需要显示一些代码? 【参考方案1】:我在 iOS9 上遇到了同样的问题,我认为这是多个进程的结果。这不是理想的解决方案,但是......在成为FirstResponder 之后,我在 setMenuVisible:YES 之前添加了一个 DELAY。
[self performSelector:@selector(showMenuController:) withObject:point afterDelay:0.4];
【讨论】:
效果很好!我会尽快奖励赏金。谢谢【参考方案2】:请尝试在您的视图控制器中添加以下方法。
- (BOOL) canBecomeFirstResponder
return YES;
【讨论】:
我应该澄清一下,我确实有那个。 我明白了。您是否也在视图或视图控制器上调用-becomeFirstResponder
?
是的,我在 menuController 应该显示之前调用了 becomeFirstResponder。那是源于观点,而不是VC。谢谢你的帮助,顺便说一句。【参考方案3】:
我在尝试在自定义视图中显示 UIMenuController 时遇到了类似的问题。并且上面提到的延迟修复不起作用。
要修复它,我必须向 canBecomeFirstResponder 添加覆盖,以便它返回 true,我的自定义视图和它包含的 viewController。
【讨论】:
【参考方案4】:这很奇怪;但是,在我的情况下,我将标签的 UIFont 设置为 .SFUIText-Light
并导致 menuController 自动关闭。解决方法是将字体改为SanFranciscoDisplay
。
顺便说一句,如果您使用 git 作为版本控制,我建议您使用git bisect
来调试导致此错误的提交。
【讨论】:
以上是关于UIMenuController 在呈现后立即被解雇的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextField 的 editingDidBegin 中显示 UIMenuController