UITextInputDelegate方法无法正常运行

时间:2014-08-06 10:34:55

标签: ios8 ios-app-extension custom-keyboard

我现在正在使用iOS 8自定义键盘扩展程序,使用 UITextInputDelegate 方法时存在一些问题。

这是否正确:当用户长按输入区域时,应该调用 selectionWillChange: selectionDidChange:方法?只要文本字面改变,就应该调用 textWillChange: textDidChange:方法吗?

实际上,我观察到的是,当我在文本输入区域中更改选择时,会调用textWillChange:和textDidChange:,并且我无法得到其他两个方法在什么条件下被调用的线索。如果有人知道这些委托方法的用法,请告诉我。

2 个答案:

答案 0 :(得分:2)

这对我来说也不起作用......我现在正在做的只是使用textWillChangetextDidChange,正如你所提到的,当你改变你的选择时,它会被调用...(他们被称为之前之后

然后比较:
self.textDocumentProxy.documentContextBeforeInput
{{1}从 BEFORE (textWillChange)到 AFTER (textDidChange)查看选择范围或长度是否发生了变化。


像这样的东西(当然在你的.h文件中设置下面的4个NSStrings ......还没有测试过这个完整的片段,因为我刚才在SO.com上从头开始编写它,但是我确信这个原理是有效的,如果我犯了任何错误)

self.textDocumentProxy.documentContextAfterInput

答案 1 :(得分:-1)

我在UITextInput协议中指定的函数没有被调用时遇到了同样的问题。我能辨别的原因是由于inputDelegate是在运行时设置的。根据ios文档:

UIKit提供了一个私有文本输入委托,它在运行时分配给其类采用UITextInput协议的对象的inputDelegate属性。 link

在我的情况下工作的修复是重置函数中的inputDelegate:

textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
     replacementString:(NSString *)string

通过以下行:

[myUITextField setInputDelegate:self];

其中 self 实现UITextInputDelegate协议。