Swift中标签内的链接

时间:2017-06-05 09:34:52

标签: ios swift hyperlink uilabel uitextview

我想在我的应用中这样做:

enter image description here

标签如下:用户名 评论

我不知道如何在标签中添加“按钮”;我找到了这个库,但我不确定它会起作用吗? https://github.com/optonaut/ActiveLabel.swift

也许通过为第一个单词创建正则表达式来使用它?你觉得怎么样?

3 个答案:

答案 0 :(得分:7)

对于这种情况,我宁愿使用UILabel,而不是将其添加为UITextView组件,因为它具有dataDetectorTypes属性:

  

在文本视图中转换为可点击URL的数据类型。

     

您可以使用此属性指定数据类型(电话号码,   应该自动转换为网址的 http链接等)   在文本视图中。点按时,文本视图将打开该应用程序   负责处理URL类型并将URL传递给它。 请注意   如果文本视图的isEditable属性,则不会发生数据检测   设置为true

因此,您可以将其实现为:

// as mentioned in the documentation, make sure to let it be uneditable:
textView.isEditable = false
textView.dataDetectorTypes = .link

对于您的情况,我认为它应该是.link。我还建议检查UIDataDetectorTypes的其他选项。

答案 1 :(得分:3)

使用活动标签https://github.com/optonaut/ActiveLabel.swift 制作名为UILabel

label
 let customType = ActiveType.custom(pattern: "\\sjohncena\\b") //Looks for "supports"
 label.enabledTypes.append(customType3)
 label.handleCustomTap(for: customType) { self.alert("Custom type", message: $0) }

 func alert(_ title: String, message: String) {
        let vc = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
        vc.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
        present(vc, animated: true, completion: nil)
    }

其中johncena是可点击的字符串。 见https://github.com/optonaut/ActiveLabel.swift/blob/master/ActiveLabelDemo/ViewController.swift

答案 2 :(得分:2)

您可以使用TTTAttributedLabel在UILabel中制作特定的部分或单词。

例如

label.text = @"Fork me on GitHub! (https://github.com/mattt/TTTAttributedLabel/)"; // Repository URL will be automatically detected and linked
NSRange range = [label.text rangeOfString:@"me"];
[label addLinkToURL:[NSURL URLWithString:@"http://github.com/mattt/"] withRange:range];

除了超链接之外,您还可以将自定义链接添加到特定部分或单词,并且该单词变为可点击,并且在点击该单词委托方法didSelectLinkWithURL被调用时,您可以检查该函数内的该链接

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