【问题标题】:UITextView caretRectForPosition wrong value for last character after press delete keyUITextView caretRectForPosition 按下删除键后最后一个字符的值错误
【发布时间】:2014-11-17 16:50:53
【问题描述】:

我有一种方法可以在我的 Web 视图中更改文本,以检测当前插入符号位置的可见矩形。

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

它工作得很好,除非我在文档末尾并按下键盘上的删除键。在这种情况下,它会滚动到文档的开头,这是出乎意料的。

【问题讨论】:

  • 您找到解决方案了吗?我有时在添加换行符时遇到同样的问题。

标签: ipad uitextview uitextposition


【解决方案1】:

我也遇到过类似的问题……这似乎是文本视图中的时间问题。 我的解决方案是:

A:从 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 ...
}

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多