2013-11-02 126 views
4

我有一个UITextView挂钩到一个平移手势识别器。当我将手指拖到文本视图上时,我使用characterIndexForPoint方法来确定手指在哪个字符上方&,然后突出显示该点处的文本。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

'触摸的方法连续调用两次,一旦charIndex是167,然后是270.' - 是两个调用中使用的相同'touchPoint'吗? –

+0

是的,这是(这就是为什么我写“传递相同的参数”) – Epaga

回答

3

有一件事你做错了,fractionOfDistanceBetweenInsertionPoints:不应该是零。这是一个结果参数,所以如果您不在意,它应该是CGFloatNULL的地址。

 CGPoint touchPoint = [sender locationInView:self.txtView]; 
    CGFloat fraction = 0; 
    NSUInteger charIndex = [self.txtView.layoutManager 
        characterIndexForPoint:touchPoint 
         inTextContainer:self.txtView.textContainer 
fractionOfDistanceBetweenInsertionPoints:&fraction]; 

你可能不感兴趣的fractionOfDistanceBetweenInsertionPoints:后,但它可能是能够帮助你诊断这个问题。你传递的观点可能不明确,它会帮助你看到这一点。

相关问题