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 时,它显示“输入 5 个字符”;但是如果我单击删除/退格键,数字变为 6,而不是 4。这是怎么回事?输入时如何知道 UITextView 中的确切字符数?

4

4 回答 4

3

您可以在编辑后获取文本字段中的文本,然后检查其长度:

NSString* newString = [textField1.text stringByReplacingCharactersInRange:range withString:string];
int newLength = [newString length];
于 2012-09-10T14:03:26.513 回答
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 回答
2

文本视图在实际更改其文本textView:shouldChangeTextInRange:replacementText: 之前发送。

它在更改其文本textViewDidChange: 后发送。

所以只需实现textViewDidChange:

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

检查替换文本参数的长度,在退格的情况下将为零。

还有另一种情况需要考虑,用户选择一系列字符并将文本粘贴到字段中。在这种情况下,您还应该减去替换文本的长度。

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