2016-04-13 5 views
2

мне нужен текст щелкнули часть из TTTAttributedLabel:Получить текстовую часть щелкнули URL в TTTAttributedLabel

// initialize 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 

    // Attributed Message Label 
    NSMutableAttributedString *messageTextAttr =[row valueForKey:@"message_text_attr"]; 

    cell.messageText.attributedText = messageTextAttr; 
    cell.messageText.delegate = self; 

    [messageTextAttr enumerateAttribute:NSLinkAttributeName inRange:NSMakeRange(0, messageTextAttr.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { 
     if (value) { 
      [cell.messageText addLinkToURL:[NSURL URLWithString:value] withRange:range]; 
     } 
    }]; 

    ... 
} 

// click event 
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { 
    NSLog(@"link %@", [url absoluteString]); 
    NSLog(@"whole label %@", label); 
} 

Но у меня есть только ссылка и вся этикетка, но не Clicked часть (текстовая часть, которая будет нажата) , Как я могу его получить?

+0

URL-адрес, на который вы нажали, добавляет ли пользовательские атрибуты linkAttributes для таких вещей, как @, #? – SeanLintern88

+0

@ SeanLintern88 Нет, мне нужна текстовая часть метки, на которую нажимается, а не весь текст. –

+0

Да, URL - это текст, на который щелкнул человек. url.absoluteString()? – SeanLintern88

ответ

3

Единственное решение, о котором я могу думать, - это реализовать attributedLabel: didSelectLinkWithTextCheckingResult: вместо attributedLabel: didSelectLinkWithURL:.

Полезно то, что NSTextCheckingResult содержит свойство, которое вы можете использовать для поиска фактического текста (а не URL-адреса).

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithTextCheckingResult:(NSTextCheckingResult *)result { 

    NSString* textClicked = [label.text substringWithRange:result.range]; 

    //Get the URL and perform further actions 
    NSURL* urlClicked = result.URL; 
}