2013-11-02 186 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:後,但它可能是能夠幫助你診斷這個問題。你傳遞的觀點可能不明確,它會幫助你看到這一點。

相關問題