UITextView textView:shouldChangeTextInRange:replacementText:删除大部分文本时不会触发?

时间:2009-08-07 15:14:00

标签: iphone cocoa-touch

我正在尝试为UITextView实现一个字符计数器,但在以下情况下发现计数器不准确:

  • 输入一些文字字符,例如“The”
  • 点击返回25次
  • 按住删除按钮删除文本(并按住它直到光标到达顶部)
  • 当光标到达顶部时(删除“The”后),计数器仍然显示UITextView包含3个字符
  • 再次点击删除按钮以使计数正确并说明有0个字符

我在这种情况下输出了计数器和replacementText的结果,最后的输出如下:

2009-08-06 15:29:14.357人物:3
2009-08-06 15:29:14.369

因此,似乎当以这种方式大量删除大量换行符(通常可能是大部分文本)时,textView:shouldChangeTextInRange:replacementText:在该序列的末尾不会被触发,需要另外点击删除按钮。

我的计数器代码如下:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    NSString* nextText = [textView.text stringByReplacingCharactersInRange:range withString:text];
    int characterCount = [nextText length];

关于如何克服这个问题的任何想法,以便在这种情况下计数是正确的(或者我可能做错了什么)?

1 个答案:

答案 0 :(得分:2)

我仍然不知道textView的问题:shouldChangeTextInRange:replacementText:没有被调用,但我刚刚发现将我的计数器代码放在textViewDidChange :(这是一个更符合代码的逻辑位置)按预期工作。