我有一个用于聊天应用程序的 inputAccessoryView,它始终保持可见并停靠在屏幕底部,用于类似于大多数消息应用程序的文本输入。
当我呈现带有actionSheet样式的alertController时,inputAccessoryView会在呈现警报时向下动画离开屏幕,然后在警报解除时再次备份。这反过来会滚动我的 tableView,这是不可取的。
发生这种情况是因为当出现警报时聊天视图控制器放弃了firstResponder。
是否有无论如何要呈现一个alertController而不放弃firstResponder,或者无论如何要在视图resignsFirstResponder时将inputAccessoryView停靠在屏幕底部?
The InputAccessoryView
位于 ViewController 层次结构之外 - 它包含在UITextEffectsWindow
其 rootViewController 是UIInputWindowController
。同样,键盘包含在UIRemoteKeyboardWindow
和它自己的UIInputWindowController
.
因此,如果我们从最上面的窗口或更高的窗口显示警报(UITextEffectsWindow
or UIRemoteKeyboardWindow
),它不会辞去第一响应者。
我发现的最简单的解决方案是:
let topViewController = UIApplication.shared.windows.last!.rootViewController!
topViewController.present(alert, animated: true, completion: nil)
理想情况下,您可以安全地处理这些选项。一个可能更好的解决方案(我在之前的解决方案中看到了一些控制台错误)是创建一个具有更高 WindowLevel 的新 UIWindow,使其成为关键窗口并可见,并从那里显示警报。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)