4

我有一个连接到平移手势识别器的 UITextView。当我将手指拖到文本视图上时,我使用 characterIndexForPoint 方法来确定我的手指在哪个字符上方,然后突出显示该点的文本。

在视图中的文本有换行符的某些情况下,即使我传入相同的参数,此方法似乎也会返回不同的结果。连续调用两次touched方法,一次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];
 ...

这是一个已知的错误?难道我做错了什么?

4

1 回答 1

5

你做错的一件事是fractionOfDistanceBetweenInsertionPoints:不应该为零。它是一个结果参数,所以它应该是 a 的地址,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:,但它可能可以帮助您诊断此问题。你传递的点可能是模棱两可的,它会帮助你看到这一点。

于 2013-12-01T14:45:20.567 回答