UITextField和UITextView都采用UITextInput协议。 UITextView的selectedRange属性返回NSRange,其中UITextField没有任何选择属性/方法。我想使用一个例程来管理UITextField或UITextView中的插入。
所以我做了以下事情:
id<UITextInput> textInput = nil;
if ([self.aTextView isFirstResponder]) {
textInput = self.aTextView;
} else if ([self.aTextField isFirstResponder]) {
textInput = self.aTextField;
}
if (textInput != nil) {
UITextRange * selectedRange = textInput.selectedTextRange;
// ...
}
只有在selectedTextRange属性上的'无法识别的选择器发送到实例'时才会立即崩溃。
我做错了什么?
[编辑:似乎在iOS 5中有效,但在iOS 4中的设备上崩溃了。这是iOS 5中的变化吗?文件说协议是3.2 +。]
答案 0 :(得分:6)
我在自己的应用程序中验证了UITextView和UITextField在iOS 4模拟器中都与-[UITextView selectedTextRange]: unrecognized selector
崩溃,但在iOS 5模拟器中没有崩溃。
这个问题的答案表明,与UITextInput的一致性是iOS 5中的新功能:Can I select a specific block of text in a UITextField?。所以协议本身似乎是iOS 3.2,但UITextView / Field在iOS 5之前没有使用该协议。
答案 1 :(得分:1)
@ Absinthe的编辑是正确的。直到iOS 5,UITextField
才开始遵循UITextInput
协议。