UITextField和UITextView都采用了UITextInput协议(protocol)。 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 中的更改吗?文档说协议(protocol)是 3.2+。]
最佳答案
我在自己的应用程序中验证了 UITextView 和 UITextField 都因 -[UITextView selectedTextRange]: unrecognized selector
而在 iOS 4 模拟器中崩溃,但在 iOS 5 模拟器中没有。
这个问题的答案表明与 UITextInput 的一致性是 iOS 5 中的新事物:Can I select a specific block of text in a UITextField? .所以看起来协议(protocol)本身是 iOS 3.2,但 UITextView/Field 在 iOS 5 之前没有使用该协议(protocol)。
关于ios - UITextField 和 UITextView 的 UITextInput 协议(protocol)使用来管理崩溃时的选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923659/