iOS8委托方法中的无对象 – 自定义键盘

我正在构build一个自定义的键盘,我在我的InputViewController实现下面的委托方法。
但我总是得到_textInput = nil_

 - (void)textWillChange:(id<UITextInput>)textInput - (void)textDidChange:(id<UITextInput>)textInput - (void) selectionWillChange:(id<UITextInput>)textInput - (void) selectionDidChange:(id<UITextInput>)textInput 

有谁知道如何解决它?
nil理由?
我是否需要自己执行某些操作?

好问题。 但似乎UITextInputDelegate不是实现的协议。

从苹果公司的文档名为“ 低级文本处理技术 :

当由于外部原因(即,它们不是由来自文本input系统的调用引起的)在文本视图中发生更改时, UITextInput对象应将textWillChange:textDidChange:selectionWillChange:selectionDidChange: messages发送到input委托(它有一个参考)。 例如,当用户点击一个文本视图,并设置所选文本的范围以将插入点放在手指下时,您将发送selectionWillChange:在更改所选范围之前,发送selectionDidChange:在更改范围之后。

并从UITextInputDelegate上的文档 :

UIKit提供了一个私人文本input委托,它在运行时为其类的UITextInput协议的inputDelegate属性分配。

上述的含义是我们不执行这些委托方法; 我们使用它们来通知inputDelegate你已经通过键盘input以外的方式改变了你的文本或select。

下面是一个示例方法来说明这一点:

 - (void)delete:(id)sender; { if (selection && ![selection isEmpty]) { [inputDelegate textWillChange:self]; [inputDelegate selectionWillChange:self]; [self replaceRange:selection withText:@""]; [inputDelegate selectionDidChange:self]; [inputDelegate textDidChange:self]; } } 

示例代码在这里有更多的例子。