我现在正在使用iOS 8自定义键盘扩展程序,使用 UITextInputDelegate 方法时存在一些问题。
这是否正确:当用户长按输入区域时,应该调用 selectionWillChange:和 selectionDidChange:方法?只要文本字面改变,就应该调用 textWillChange:和 textDidChange:方法吗?
实际上,我观察到的是,当我在文本输入区域中更改选择时,会调用textWillChange:和textDidChange:,并且我无法得到其他两个方法在什么条件下被调用的线索。如果有人知道这些委托方法的用法,请告诉我。
答案 0 :(得分:2)
这对我来说也不起作用......我现在正在做的只是使用textWillChange
和textDidChange
,正如你所提到的,当你改变你的选择时,它会被调用...(他们被称为之前和之后)
然后比较:
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协议。