3

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+。]

4

2 回答 2

6

我在自己的应用程序中验证了 UITextView 和 UITextField-[UITextView selectedTextRange]: unrecognized selector在 iOS 4 模拟器中都崩溃了,但在 iOS 5 模拟器中没有。

这个问题的答案表明与 UITextInput 的一致性是 iOS 5 中的新事物:我可以在 UITextField 中选择特定的文本块吗?. 所以看起来协议本身是 iOS 3.2,但 UITextView/Field 在 iOS 5 之前没有使用该协议。

于 2011-12-09T01:39:41.830 回答
1

@Absinthe 的编辑是正确的。直到 iOS 5 才UITextField开始遵循该协议。UITextInput

于 2012-05-23T23:07:08.490 回答