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

ipad – 按删除键后UITextView caretRectForPosition错误值为最后一个字符,第1张

概述我在Web视图中更改了文本的方法,以检测当前插入符号位置的可见rect. UITextPosition *endPos = self.selectedTextRange.end; CGRect rect = [self caretRectForPosition:endPos];[self scrollRectToVisible:rect animated:NO]; 除非我在文档末尾并按下键 我在Web视图中更改了文本的方法,以检测当前插入符号位置的可见rect.

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

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

解决方法 我有一个类似的问题……它似乎是文本视图中的计时问题.
我的解决方案是:

答:检测来自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 ...}
总结

以上是内存溢出为你收集整理的ipad – 按删除键后UITextView caretRectForPosition错误值为最后一个字符全部内容,希望文章能够帮你解决ipad – 按删除键后UITextView caretRectForPosition错误值为最后一个字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1081960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存