按删除键后,UITextView caretRectForPosition错误值为最后一个字符

时间:2014-11-17 16:50:53

标签: ipad uitextview uitextposition

我在网页视图中更改了一个文本方法,以检测当前插入位置的可见矩形。

UITextPosition *endPos = self.selectedTextRange.end;   
CGRect rect = [self caretRectForPosition:endPos];
[self scrollRectToVisible:rect animated:NO];

除非我在文档末尾按下键盘上的删除键,否则效果很好。在这种情况下,它会滚动到文档的开头,这是意料之外的。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题......它似乎是文本视图中的计时问题。 我的解决方案是:

答:检测来自caretRectForPosition的无效结果。在我的例子中,无效坐标似乎总是要么是大的负值(-1.0似乎是i.O.!)或者是origin.y的“无限”。

B:在短时间后重新询问插入位置的文本视图。我检查了一些延迟值; 0.05似乎足够了。

代码:

- (void)textViewDidChange:(UITextView *)pTextView {

    UITextPosition* endPos = pTextView.selectedTextRange.end;

    CGRect          caretRectInTextView = [pTextView caretRectForPosition:endPos];

    if ((-1.0 > CGRectGetMinY(caretRectInTextView)) ||
        (INFINITY == CGRectGetMinY(caretRectInTextView))) {
        NSLog(@"Invalid caretRectInTextView detected!");

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)),
                       dispatch_get_main_queue(),
                       ^{
                           // Recall
                           [self textViewDidChange:pTextView];
                        });
        return;


    }

    ... your code ...
}