1

UITextViewに入力するときに文字番号を表示したい。しかし、削除/バックスペースキーを押すと混乱します。

私が使う:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

私のコードは次のとおりです。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSLog(@"input %d chars",textView.text.length + 1);
    return YES;
}

helloと入力すると、「input5chars」と表示されます。しかし、削除/バックスペースキーをクリックすると、数字は4ではなく6になります。これはどうしたのですか。入力したときにUITextViewの文字の正確な数を知るにはどうすればよいですか?

4

4 に答える 4

3

編集後にテキストフィールドに表示されるテキストを取得し、その長さを確認できます。

NSString* newString = [textField1.text stringByReplacingCharactersInRange:range withString:string];
int newLength = [newString length];
于 2012-09-10T14:03:26.513 に答える
2

テキストビューは、実際にテキストを変更するtextView:shouldChangeTextInRange:replacementText: 前に送信します。

テキストを変更したtextViewDidChange: に送信します。

textViewDidChange:したがって、代わりに実装するだけです。

- (void)textViewDidChange:(UITextView *)textView {
    NSLog(@"textView.text.length = %u", textView.text.length);
}
于 2012-09-10T16:05:17.080 に答える
2

それはかなり明白です:)

長さ+1を出力しています

textView.text.length + 1

ただし、バックスペースによって長さが1長くなるわけではなく、1短くなります。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

    // Do the replacement
    NSString *newText = [textView.text stringByReplacingCharactersInRange:range withString:text];

   // See what comes out
    NSLog(@"input %d chars", newText.length);

    return YES;
}
于 2012-09-10T14:03:55.773 に答える
0

置換テキスト引数の長さを確認してください。バックスペースの場合はゼロになります。

考慮すべき別のケースがあります。ユーザーが文字の範囲を選択し、フィールドにテキストを貼り付けます。その場合、置き換えられたテキストの長さも差し引く必要があります。

NSLog(@"New length is: %d chars",textView.text.length - range.length + text.length);
于 2012-09-10T14:03:27.000 に答える