3

我有一个 UITextView,我正在将所有文本视图更改事件记录到一个数组中。

当用户快速删除时(按住delete键一次删除单词而不是一个字符),当调用textView:shouldChangeTextInRange:replacementText方法时,range变量的长度只有1,而实际上是range应该是单词中删除的字母数。有谁知道这个 Apple Bug 的任何变通方法,以便我可以正确识别 UITextView 中更改的位置和范围以及文本?

4

2 回答 2

0

不,它不是错误。每次您的文本更改时,都会调用此函数。可能您正在使用调试模式并使用键盘退格。它将在到达断点之前生成多个事件。因此,该函数将被多次调用。

于 2012-02-15T13:56:24.167 回答
0

正如您在问题中提到的那样,即使删除了整个单词,“范围”也始终为 1。您必须检查范围“range.length”的长度,这将为您提供从 UITextView 中删除的字符的准确计数。我有同样的场景,并基于它做了一些工作,它只允许一次删除单个字符而不是整个单词:

-(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 回答