UITextView selectedTextRange错误/光标位置

时间:2019-07-04 13:37:20

标签: ios objective-c uitextview

我有一个UITableView,其单元格包含UITextView。轻按UITextView时,将显示键盘,并且整个文本视图都位于键盘上方。滚动时,关闭键盘。 UITextViews的高度可能很大,用户可能希望点击文本视图中间的某个位置。然后,我希望UITextView中的光标位于键盘上方。为此,我尝试计算光标在文本视图中的位置,并且由于某种原因在大多数情况下会弄错它。我尝试通过以下两种方式进行计算:

-(void)textViewDidBeginEditing:(UITextView *)textView中,我可以尝试:

[textView caretRectForPosition:textView.selectedTextRange.start].origin

或:

UITextRange *textRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.selectedTextRange.start];
NSString *text = [textView textInRange:textRange];

CGFloat width = textView.frame.size.width;
CGSize constraintSize = CGSizeMake(width, CGFLOAT_MAX);
CGRect boundingBox = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: textView.font} context:nil];
CGFloat height = boundingBox.size.height;

据我所知,第一个应该让我知道光标上端的位置,第二个应该让我光标下端的位置。但是,它们都返回错误的位置。我注意到第二种方法中的文本也是错误的文本,返回的光标位置对于给定的文本是正确的。因此看起来好像是触摸错误或发生了什么,但随后光标位于正确的位置。

有什么问题?预先谢谢你。

0 个答案:

没有答案