首页 文章

UITextView委托方法textView:shouldChangeTextInRange:replacementText:在快速删除时给出错误的replacementText

提问于
浏览
3

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

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

2 回答

  • 0

    不,它不是一个bug . 每次文本更改时,此函数都会调用 . 您可能正在使用调试模式并使用键盘提供退格键 . 它会在遇到断点之前生成多个事件 . 因此,该函数将多次调用 .

  • 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;
        }
    }
    

相关问题