我有一个 UITextView,我正在将所有文本视图更改事件记录到一个数组中。
当用户快速删除时(按住delete键一次删除单词而不是一个字符),当调用textView:shouldChangeTextInRange:replacementText方法时,range变量的长度只有1,而实际上是range应该是单词中删除的字母数。有谁知道这个 Apple Bug 的任何变通方法,以便我可以正确识别 UITextView 中更改的位置和范围以及文本?
我有一个 UITextView,我正在将所有文本视图更改事件记录到一个数组中。
当用户快速删除时(按住delete键一次删除单词而不是一个字符),当调用textView:shouldChangeTextInRange:replacementText方法时,range变量的长度只有1,而实际上是range应该是单词中删除的字母数。有谁知道这个 Apple Bug 的任何变通方法,以便我可以正确识别 UITextView 中更改的位置和范围以及文本?
不,它不是错误。每次您的文本更改时,都会调用此函数。可能您正在使用调试模式并使用键盘退格。它将在到达断点之前生成多个事件。因此,该函数将被多次调用。
正如您在问题中提到的那样,即使删除了整个单词,“范围”也始终为 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;
}
}