iOS8委托方法中的nil对象 - 自定义键盘

det*_*man 40 delegates ios ios8 ios-app-extension

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

- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
- (void) selectionWillChange:(id<UITextInput>)textInput
- (void) selectionDidChange:(id<UITextInput>)textInput
Run Code Online (Sandbox Code Playgroud)

有人知道怎么解决吗?
这是nil有原因的吗?
我需要自己实施吗?

Dra*_*kes 2

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

\n\n

来自标题为Lower Level Text-Handling Technologies的 Apple 文档:

\n\n
\n

当由于外部原因\xe2\x80\x94 在文本视图中发生更改时,\n 它们不是由文本输入系统\xe2\x80\x94 的调用引起的UITextInput\n 对象应发送textWillChange:, textDidChange:,\n selectionWillChange:,以及selectionDidChange:发送给输入委托(它保存对其的引用)的消息。例如,当用户点击文本视图并设置所选文本的范围以将插入点置于手指下方时,您将在更改所选范围之前发送\n,并在更改所选范围后selectionWillChange:发送\nselectionDidChange:范围。

\n
\n\n

从UITextInputDelegate 的文档中:

\n\n
\n

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

\n
\n\n

上面的含义是我们不实现这些委托方法;我们使用它们来通知inputDelegate您已通过键盘输入以外的方式更改了文本或选择。

\n\n

这是一个例子方法来说明这一点:

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

示例代码以及更多示例请参见此处

\n