2013-02-22 1 views
2

У меня есть этот код:Tap жест часть UITextView

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResponse)]; 
singleTap.numberOfTapsRequired = 1; 
[_textView addGestureRecognizer:singleTap]; 

Это будет реагировать на все UITextView, но можно изменить его так, что он реагирует только, когда определенная часть строки в UITextView используется? Как URL-адрес, например?

ответ

7

Вы не можете назначить жест привязки определенной строки в обычном UITextView. Вероятно, вы можете установить dataDetectorTypes для UITextView.

textview.dataDetectorTypes = UIDataDetectorTypeAll; 

Если вы хотите, чтобы обнаружить только URL, вы можете назначить,

textview.dataDetectorTypes = UIDataDetectorTypeLink; 

Проверьте документацию для получения более подробной информации по этому вопросу: UIKit DataTypes Reference. Также проверьте этот Documentation on UITextView

Обновление:

Основываясь на ваш комментарий, проверьте, как это:

- (void)tapResponse:(UITapGestureRecognizer *)recognizer 
{ 
    CGPoint location = [recognizer locationInView:_textView]; 
    NSLog(@"Tap Gesture Coordinates: %.2f %.2f", location.x, location.y); 
    NSString *tappedSentence = [self lineAtPosition:CGPointMake(location.x, location.y)]; 
    //use your logic to find out whether tapped Sentence is url and then open in webview 
} 

От this используйте:

- (NSString *)lineAtPosition:(CGPoint)position 
{ 
    //eliminate scroll offset 
    position.y += _textView.contentOffset.y; 
    //get location in text from textposition at point 
    UITextPosition *tapPosition = [_textView closestPositionToPoint:position]; 
    //fetch the word at this position (or nil, if not available) 
    UITextRange *textRange = [_textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularitySentence inDirection:UITextLayoutDirectionRight]; 
    return [_textView textInRange:textRange]; 
} 

Вы можете попробовать с гранулярности таких как, UITextGranularitySentence, UITextGranularityLine и т. д. Проверьте documentation здесь.

+0

, который отобразит ссылку, но этот жест будет реагировать на весь текст. –

+0

Да. Как только вы нажмете на ссылку, она откроет соответствующее приложение на основе схемы URL. – iDev

+0

Да, но с URL-адресом, который он открывает в сафари, с UITapGesture, я надеялся, что он откроется в моем UIWebView –