Iphone UITextView textView:shouldChangeTextInRange:replacementText:donds';删除大部分文本时是否不触发?

Iphone UITextView textView:shouldChangeTextInRange:replacementText:donds';删除大部分文本时是否不触发?,iphone,cocoa-touch,Iphone,Cocoa Touch,我试图为UITextView实现字符计数器,但发现计数器在以下情况下不准确: 输入一些文字字符,例如“The” 点击返回25次 按住delete按钮删除文本(并按住它直到光标到达顶部) 当光标到达顶部时(删除“the”之后),计数器仍然显示UITextView包含3个字符 再次点击delete(删除)按钮,使计数本身正确,并显示0个字符 在这种情况下,我已经输出了计数器和replacementText的结果,最后的输出如下: - (BOOL)textView:(UITextView *)te

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

  • 输入一些文字字符,例如“The”
  • 点击返回25次
  • 按住delete按钮删除文本(并按住它直到光标到达顶部)
  • 当光标到达顶部时(删除“the”之后),计数器仍然显示UITextView包含3个字符
  • 再次点击delete(删除)按钮,使计数本身正确,并显示0个字符
在这种情况下,我已经输出了计数器和replacementText的结果,最后的输出如下:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    NSString* nextText = [textView.text stringByReplacingCharactersInRange:range withString:text];
    int characterCount = [nextText length];
2009-08-06 15:29:14.357个字符:3
2009-08-06 15:29:14.369

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

我的计数器代码如下:

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

关于如何克服这一点以便计数在这种情况下是正确的(或者我可能做错了什么)?

我仍然不知道textView:shouldChangeTextInRange:replacementText:没有被调用的问题,但我刚刚发现,将计数器代码放在textViewDidChange中:(这是该代码更合理的位置)工作正常。

我认为这不是一个合适的解决方案。它没有提供原始方法所具有的复杂性。