我有一个主视图控制器,其文本字段靠近屏幕底部。显示键盘时,文本字段将向上移动-没问题。
此主视图控制器有时会添加一个子视图控制器,以在文本字段上方显示一个弹出窗口。当未显示键盘时,弹出窗口靠近屏幕底部,而在显示键盘时,弹出窗口向上移动-再次没有问题。
要在显示或隐藏键盘时上下移动视图,我使用的是标准方法:为keyboardWillChangeFrame
通知注册一个侦听器,并根据键盘的框架更新布局。只要我可以在显示键盘之前 注册一个通知侦听器,此方法就很好。
我的问题是,有时候,当键盘已经可见时,我会为弹出窗口添加子控制器。这意味着我只能在键盘可见后 注册通知侦听器。发生这种情况时,弹出控制器不知道键盘已经可见,因此无法相应地更新其布局。
(当然,有很多可能的解决方法,例如
在我的代码中,我不想使用单例,并且我有一个简单的键盘侦听器服务类,该类添加到需要处理键盘更改的每个视图控制器中。我的解决方法是在此服务中有一个静态变量来跟踪当前的键盘框架。可以,但是有代码味道。)
我想知道的是,iOS是否为我们提供了一种简单地获取键盘的 current 状态,而无需监听更新的方法。
使用通知使我有责任拥有键盘状态的内部模型,并使其与实际状态保持同步。这对于响应更改很有用,但是并不能使我确信自己的建模状态始终是准确的-如果我错过了通知,它将不同步。如果没有办法简单地检查实际状态,那就太奇怪了。