当alertController(actionSheet)出现时,inputAccessoryView会动画

ali*_*ego 6 xcode ios inputaccessoryview swift uialertcontroller

我有一个聊天应用程序的inputAccessoryView,它始终保持可见状态,并且停靠在屏幕底部,用于类似于大多数消息收发应用程序的文本输入。

当我呈现带actionSheet样式的alertController时,在呈现警报时,inputAccessoryView会在屏幕外动画,然后在解除警报时再次备份。这又会滚动我的tableView,这是不可取的。

之所以发生这种情况,是因为在显示警报时,聊天viewController放弃了firstResponder。

无论如何,当它的视图resignsFirstResponder出现时,是否要呈现一个alertController而不放弃firstResponder,还是将inputAccessoryView停靠在屏幕底部?

Cor*_* W. 7

InputAccessoryView坐在你的ViewController的层次结构之外的-它包含在UITextEffectsWindow其RootViewController的是UIInputWindowController。同样,键盘也包含在UIRemoteKeyboardWindow它自己的键盘中UIInputWindowController

因此,如果我们从最上方的窗口或更高的窗口(UITextEffectsWindowUIRemoteKeyboardWindow)显示警报,则该警报不会辞职。

我找到的最简单的解决方案是:

let topViewController = UIApplication.shared.windows.last!.rootViewController! topViewController.present(alert, animated: true, completion: nil)

理想情况下,您可以安全地处理这些可选项。一个可能更好的解决方案(我已经从以前的解决方案中看到了一些控制台错误)将是创建一个具有更高WindowLevel的新UIWindow,使其成为关键窗口并可见,然后从那里显示警报。