我有一个UITextView,它连接到一个平移手势识别器。当我在文本视图上拖动手指时,我使用characterIndexForPoint方法来确定我的手指在哪个角色上。然后在那一点突出显示文本。
在视图中的文本有换行符的某些情况下,即使我传入相同的参数,此方法似乎也会返回不同的结果。触摸的方法连续两次调用,一旦charIndex为167,接下来就是270。
我检查了文本视图的AttributedString,在两种情况下都是相同的字体大小。
- (IBAction)touched:(UIPanGestureRecognizer *)sender {
if (self.txtView.isFirstResponder) {
return;
}
if (sender.state == UIGestureRecognizerStateChanged) {
CGPoint touchPoint = [sender locationInView:self.txtView];
NSUInteger charIndex = [self.txtView.layoutManager
characterIndexForPoint:touchPoint
inTextContainer:self.txtView.textContainer
fractionOfDistanceBetweenInsertionPoints:0];
...
这是一个已知的错误吗?我做错了吗?
答案 0 :(得分:4)
你做错的一件事是fractionOfDistanceBetweenInsertionPoints:
不应该为零。它是一个结果参数,因此如果您不关心,它应该是CGFloat
或NULL
的地址。
CGPoint touchPoint = [sender locationInView:self.txtView];
CGFloat fraction = 0;
NSUInteger charIndex = [self.txtView.layoutManager
characterIndexForPoint:touchPoint
inTextContainer:self.txtView.textContainer
fractionOfDistanceBetweenInsertionPoints:&fraction];
您可能以后对fractionOfDistanceBetweenInsertionPoints:
不感兴趣,但它可以帮助您诊断此问题。你传递的观点可能含糊不清,它会帮助你看到它。