我有一个聊天应用程序的inputAccessoryView,它总是保持可见,并停靠在屏幕底部用于文本输入,类似于大多数消息应用程序。
当我使用actionSheet样式显示alertController时,inputAccessoryView在显示警报时会向下移动到屏幕外,然后在解除警报时又返回到屏幕外,这反过来又会滚动tableView,这是不可取的。
发生这种情况的原因是,当出现警报时,聊天视图Controller正在放弃firstResponder。
有没有办法显示一个alertController而不给予firstResponder,或者当一个inputAccessoryView的视图放弃firstResponder时,保持它停靠在屏幕底部?
4条答案
按热度按时间7kqas0il1#
InputAccessoryView
位于ViewController的层次结构之外--它包含在UITextEffectsWindow
中,其rootViewController是UIInputWindowController
。类似地,键盘包含在UIRemoteKeyboardWindow
和它自己的UIInputWindowController
中。因此,如果我们从最上面的窗口或更高的窗口(
UITextEffectsWindow
或UIRemoteKeyboardWindow
)显示警报,它不会放弃第一响应者。我找到的最简单的解决办法是:
x1米7英寸x1米8英寸
理想情况下,您可以安全地处理这些选项。一个可能更好的解决方案(我已经看到了前一个解决方案中的一些控制台错误)是创建一个具有更高WindowLevel的新UIWindow,使其成为关键窗口并可见,然后从那里显示警报。
b09cbbtk2#
感谢@Corey W.(给他投票),我们找到了解决这个问题的方法。Swift 5中更安全的方法:
yzxexxkh3#
对于那些寻找Corey答案的Objective-C等价物的人:
atmip9wb4#
此问题可修复“键盘无法显示视图控制器(尝试显示〈UIAlertController:0x7fd63004d600〉)”错误。