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]; } }
示例代码在这里有更多的例子。