Ios8 UIT指定的委托方法无法正常工作

Ios8 UIT指定的委托方法无法正常工作,ios8,ios-app-extension,custom-keyboard,Ios8,Ios App Extension,Custom Keyboard,我现在正在开发iOS 8自定义键盘扩展,在使用UIT方法时存在一些问题 当用户长按输入区域时,是否应该调用:selectionWillChange:和selectionDidChange:方法?而textWillChange:和textDidChange:方法应该在文本真正发生变化时调用吗 实际上,我观察到的是,当我更改文本输入区域中的选择时,会调用textWillChange:和textDidChange:,我不知道其他两个方法是在什么条件下调用的。如果有人知道这些委托方法的用法,请告诉我。这

我现在正在开发iOS 8自定义键盘扩展,在使用UIT方法时存在一些问题

当用户长按输入区域时,是否应该调用:selectionWillChange:和selectionDidChange:方法?而textWillChange:和textDidChange:方法应该在文本真正发生变化时调用吗


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

这对我也不起作用。。。我目前所做的只是使用
textWillChange
textDidChange
当您更改选择时,它会被调用。。。(他们在之前和之后被调用

然后比较:
self.textDocumentProxy.documentContextBeforeInput

self.textDocumentProxy.documentContextAfterInput

之前的(textWillChange)和之后的(textDidChange)查看选择范围或长度是否有任何更改


类似这样的内容(当然,在你的.h文件中设置下面的4个NSString…我没有测试这段代码,因为我刚刚在SO.com上从头开始编写了它,但我确信如果我犯了任何错误,这个原则是有效的)

-(void)textWillChange:(id)textInput{
beforeStringOfTextBehindCursor=self.textDocumentProxy.documentContextBeforeInput;
beforeStringOfTextAfterCursor=self.textDocumentProxy.documentContextAfterInput;
}
-(无效)textDidChange:(id)textInput{
AfterStringOffextBehindCursor=self.textDocumentProxy.documentContextBeforeInput;
AfterStringOffextAfterCursor=self.textDocumentProxy.documentContextAfterInput;
BOOL-didSelectionChange=否;
如果(![BeforestingOfTextBehindCursor为相等字符串:afterStringOfTextBehindCursor]){
didSelectionChange=是;
}
如果(![BeforestingOfTextAfterCursor IseQualString:afterStringOfTextAfterCursor]){
didSelectionChange=是;
}
如果(didSelectionChange){
NSLog(@“选择已更改!”);
}   
}

我遇到了与未调用UIT输出协议中指定的函数相同的问题。据我所知,原因是inputDelegate是在运行时设置的。根据ios文档:

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

在我的情况下,修复方法是重置函数中的inputDelegate:

textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
     replacementString:(NSString *)string
通过以下行:

[myUITextField setInputDelegate:self];

self在其中实现了委托协议。

对此也进行了讨论。我无法调用
selectionWillChange
selectionDidChange
。从(适度的)文档中不清楚应该在什么时候调用它。“当选择发生变化时”并不确切。我试着移动光标,选择,移动选择,复制,粘贴。我错过了什么吗?完全同意。我读了一百遍文档,仍然找不出任何线索。@bauerMusic给了你一个有效的解决方案,尽管它不是你想要的方法。缺陷仍然不起作用,但谢天谢地还有解决办法。我在一周前向苹果公司提交了一份缺陷报告,并收到了他们的“测试用例”请求,这是我最近发送的。要么这不是它应该发挥的作用,要么我误解了代表的职能,在这种情况下,文件应该更清晰、更具体。这个答案不清楚,似乎是错误的。问题是如何在iOS8键盘扩展中激活此协议,该扩展仅在有限的UIT代理方法中起作用。我找不到任何UITextField可用于设置输入委托,也找不到任何替代ShouldChangeCharactersRange的方法。我同意Randy Hill的观点。可能在一个平行宇宙中,有一个UITextfield可用于op所说的这个虚构的UITextfield,可惜不在这个宇宙中。
[myUITextField setInputDelegate:self];