ios - 获取 TTTAttributedLabel 中单击的 URL 的文本部分

标签 ios objective-c tttattributedlabel

我需要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);
}

但我只有链接和整个标签,但没有单击的部分(单击的文本部分)。我怎样才能得到它?

最佳答案

我能想到的唯一解决方案是实现 attributedLabel: didSelectLinkWithTextCheckingResult: 而不是 attributedLabel: didSelectLinkWithURL:

它的好处是 NSTextCheckingResult 包含一个 range 属性,您可以使用它来查找单击的实际文本(而不是 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;
}

关于ios - 获取 TTTAttributedLabel 中单击的 URL 的文本部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36595707/

相关文章:

ios - 如何实现选择按钮

ios - 如何检测 UITextField 外的点击(关闭键盘)

ios - 如何实现iOS12.1版本自动布局约束的兼容性

IOS 12 PWA 支持

ios - 将点击事件传递给 subview iOS

ios - 带有 Swift 的 TTTAttributedLabel 中的可点击链接

ios - 计算跨多个 View Controller ios 花费的时间

ios - 如何获得 UITextView 的高度应该给出文本的宽度和长度?

objective-c - 是否可以使用 presentMoviePlayerViewControllerAnimated 播放多个剪辑?