3

UITextView があり、すべてのテキスト ビュー変更イベントを配列に記録しています。

ユーザーが高速で削除している場合 (delete キーを押したままにして、1 文字だけでなく単語を一度に削除する場合)、textView:shouldChangeTextInRange:replacementText メソッドが呼び出されると、実際には範囲がは、単語内で削除された文字の数でなければなりません。UITextViewで変更された場所と範囲、およびテキストを正しく識別できるように、このApple Bugの回避策を知っている人はいますか?

4

2 に答える 2

0

いいえ、バグではありません。この関数は、テキストが変更されるたびに呼び出されます。おそらくデバッグモードで作業していて、キーボードでバックスペースを与えています。ブレークポイントに到達する前に複数のイベントが生成されます。したがって、関数は複数回呼び出されます。

于 2012-02-15T13:56:24.167 に答える
0

質問で述べたように、単語全体が削除された場合でも、「範囲」は常に 1 です。UITextViewから削除される正確な文字数を提供する範囲「range.length」の長さを確認する必要があります。私は同じシナリオを持っていて、それに基づいて回避策をいくつか実行しました。これにより、単語全体ではなく、一度に1文字のみを削除できます。

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@""]) {
        // Check if length of range being deleted is less than 1 then only delete it
        if (range.length > 1) {
            return NO;
        } else
            return YES;
    } else {
        return YES;
    }
}
于 2014-04-17T09:54:57.063 に答える