Ios 我如何才能创建一个;超级链接“;斯威夫特?

Ios 我如何才能创建一个;超级链接“;斯威夫特?,ios,cocoa-touch,hyperlink,swift,Ios,Cocoa Touch,Hyperlink,Swift,我试图使单独的文本片段UILabels可点击。我正在寻找的是在web开发中通常被称为超链接的东西 每个a标记都是它自己的UILabel,当单击标记之间的文本时,理想情况下,它会将Safari打开到指定的href 我已经找到了大量关于如何在Objective-C中完成这类工作的资源,但它们似乎都不必要地复杂,并且不能很好地转化为Swift(它们符合Objective-C组织结构,在Swift中不起作用,并且与推荐的语言使用方式背道而驰) 以下是一些: 如果我有一个3ui标签s 项目1

我试图使单独的文本片段
UILabel
s可点击。我正在寻找的是在web开发中通常被称为超链接的东西


每个
a
标记都是它自己的
UILabel
,当单击标记之间的文本时,理想情况下,它会将Safari打开到指定的
href

我已经找到了大量关于如何在Objective-C中完成这类工作的资源,但它们似乎都不必要地复杂,并且不能很好地转化为Swift(它们符合Objective-C组织结构,在Swift中不起作用,并且与推荐的语言使用方式背道而驰)

以下是一些:

如果我有一个3
ui标签
s

项目1

项目2

项目3

那么,在Safari中,最好的“Swift-y”方式是什么,使每个项目都可以打开到不同的URL


我可以为每个按钮创建单独的按钮,但UILabel是通过编程方式填充的,因此我认为让文本响应点击可能是一个更好的选择。

一种方法如下所示。
这些假设是:

  • self.url是一个字符串数组,包含与每个
    UILabel
    关联的URL
  • 每个
    ui标签
    标记
    都已设置为数组中相应的索引
  • labelTapped:
    设置为标签的
    touchUpInside
    处理程序
<代码>导入基础 导入UIKit 类URL测试{ 变量URL:[字符串] init(){ self.url=[String]()//将URL加载到此处 } @iAction func labelTapped(发件人:UILabel!){ 设urleindex=sender.tag; 如果(urlIndex>=0&&urlIndexSwift 3 我在github中创建了一个LinkUILabel类: 这样,您只需添加可检查的url,如图所示: 或以编程方式分配url变量:

linkUILabel.url = "www.example.com"
如果您想自己实现,我也找到了解决方案!:)

使用:

// This is the label
@IBOutlet weak var label: UILabel!

override func loadView() {
    super.loadView()

    // This is the key
    let tap = UITapGestureRecognizer(target: self, action: #selector(self.onClicLabel(sender:)))
    label.isUserInteractionEnabled = true
    label.addGestureRecognizer(tap)
}

// And that's the function :)
func onClicLabel(sender:UITapGestureRecognizer) {
    openUrl("http://www.google.com")
}


func openUrl(urlString:String!) {
    let url = URL(string: urlString)!
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }
}

希望有帮助!:)

通过UITextView超链接

var termsConditionsTextView: UITextView = {
let view = UITextView()
 view.backgroundColor = .clear
 view.textAlignment = .left
 
 let firstTitleString = "By registering for THIS_APP I agree with the "
 let secondTitleString = "Terms & Conditions"
 let finishTitleString = firstTitleString + secondTitleString
 let attributedString = NSMutableAttributedString(string: finishTitleString)
 attributedString.addAttribute(.link, value: "https://stackoverflow.com", range: NSRange(location: firstTitleString.count, length: secondTitleString.count))
 
 view.attributedText = attributedString
 view.textContainerInset = .zero
 view.linkTextAttributes = [
     .foregroundColor: UIColor.blue,
     .underlineStyle: NSUnderlineStyle.single.isEmpty
 ]
 
 view.font = view.font = UIFont(name: "YOUR_FONT_NAME", size: 16)
 view.textColor = UIColor.black
 
 return view }()

在一个UILabel中有多个URL在这两种语言中都有点棘手。您将需要检测标签矩形中的点击,然后尝试确定触摸了哪一行。使用多个UILabel会简单得多,因为您只需要一个简单的
touchUpInside
handler@Paulw11好的,我试试看。你介意用这个场景写一个答案吗?我将改变我的问题,以反映不同的结构。在我看来,你复制了按钮的功能。那么,出于好奇,我不得不问,为什么?按钮只是一段文本,当你点击它时,它会调用一个动作。这正是你想要的。@TimQuinn这里的问题更多的是打开Safari而不是调用操作:这些是
UILabel
s,这就是为什么我要求使用它们来解决问题。我可以使用一个按钮,但如果唯一的区别是在标签上添加一个修补处理程序,为什么要更改它呢?@TimQuinn我确实最终制作了这些按钮,因为它们本机处理的方式比
UILabel
s的方式更适合它。最初我犹豫是否这样做,因为我的意图是创建一个类似于列表的东西,但按钮与标签的相似程度足以解决问题。