3

UITextField と UITextView はどちらも UITextInput プロトコルを採用しています。UITextView の selectedRange プロパティは NSRange を返しますが、UITextField には選択プロパティ/メソッドがありません。UITextField または UITextView への挿入を管理するルーチンを 1 つ使用したいと思います。

だから私は次のことをします:

    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シミュレーターでクラッシュするが、iOS5シミュレーターではクラッシュしないことを確認しました。

この質問への答えは、UITextInputへの準拠がiOS 5の新しいことであることを示唆しています:UITextFieldで特定のテキストブロックを選択できますか?。したがって、プロトコル自体はiOS 3.2であるように見えますが、UITextView/FieldはiOS5より前はそのプロトコルを利用していませんでした。

于 2011-12-09T01:39:41.830 に答える
1

@Absintheの編集は正しいです。iOS 5 になるまで、プロトコルに準拠UITextFieldし始めませんでした。UITextInput

于 2012-05-23T23:07:08.490 に答える