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

UIViewController 的视图在呈现后立即改变尺寸

如何在 SpriteKit 中呈现场景后立即接收触摸事件?

iOS - 在关闭其他视图控制器后立即呈现视图控制器

即时更新 UIMenuController

在没有动画的情况下关闭视图控制器后立即呈现视图控制器