_UIFallbackPresentationViewController

Sam*_* J. 7 objective-c uiwebview uimenucontroller ios

当我解除在iPhone上的UIWebView中点击UIMenuController上的定义打开的字典时,我一直收到以下错误: -

Unbalanced calls to begin/end appearance transitions for <_UIFallbackPresentationViewController: 0x10ab9640>.
Run Code Online (Sandbox Code Playgroud)

在此错误之后,UIMenuController在任何UIWebView中都会停止显示.

有什么想法在这里发生了什么?

更新:错误实际显示在字典视图打开时,而不是在解除它时.

更新2:错误是应用程序范围.任何有可选文本的地方(即webview,textview等)我只能使用一次定义字典.此错误显示然后,我必须退出应用程序并再次启动它,以使用字典.

小智 4

终于找到了这个问题的答案。当系统呈现字典时,它的窗口获得焦点(参见 UIWindow 中的 makeKeyAndVisible:),这很棒。当忽略保存字典的窗口无法正确给予主应用程序窗口后焦点时,就会出现问题。

如果您在字典呈现之前和之后打印出 [UIApplication sharedApplication].keyWindow ,那么您将看到应用程序窗口之前是 keyAndVisible ,之后它是一个不同的窗口。对我来说,我有一个单独的应用程序消息窗口,位于状态栏顶部,而该窗口就是字典被关闭后的 keyAndVisible。

因此,我所要做的就是在我的 UIWindow 子类中使用以下重写方法来修复它,该方法错误地接收了焦点:

- (void) makeKeyWindow {
  AppDelegate * appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
  [appDelegate.window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)

我不确定如果你没有自己的 UIWindow 来获得焦点,这将如何工作,但绝对最坏的情况是你可以添加一个虚拟的 UIWindow 来接收焦点并从上面添加完全相同的代码段。