iOS 8 键盘扩展检测第一响应者变化

iOS 8 Keyboard Extension Detecting first responder change

我正在为 iOS 编写键盘扩展(因此覆盖 UIInputViewController)并且我正在尝试弄清楚如何检测第一响应者何时发生变化。这可能吗?

我的动机是,当用户选择不同的文本输入字段(键盘处于活动状态时)时,键盘的样式可能需要更改以适应该输入的属性。当 UI 上显示多个文本字段并且用户首先选择一个(导致键盘被初始化)然后用户选择另一个具有不同属性(键盘不知道)时,可能会发生这种情况。

我查看了 UIInputViewController 公开的方法及其实现的委托,但我没有看到真正符合要求的方法。我发现的最接近的是 selectionDidChange on UITextInputDelegate.

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField

这应该会告诉您它预计何时成为 firstResponder。有几件事要记住;

*这只会在 UITextFied 成为 firstResponder 时调用。如果其他某个对象决定这样做,则不会调用它。它可能会调用下面的方法。

-(BOOL)becomeFirstResponder

*您的 class 必须符合 UITextFieldDelegate 并且您的所有 UITextField 必须将其委托设置为自我。否则他们不会在您的 class.

上调用 shouldBeginEditing

我发现获取此信息的最佳方法是覆盖 UITextInputDelegate textDidChange 方法(UIInputViewController 实现 UITextInputDelegate)。事实证明,每当用户切换输入文本字段(第一响应者)或文本因某种原因更改时(幸运的是,不是您的键盘发起更改时),都会调用 textDidChange