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中不起作用,并且与推荐的语言使用方式背道而驰)
以下是一些:
ui标签
s
项目1
项目2
项目3
那么,在Safari中,最好的“Swift-y”方式是什么,使每个项目都可以打开到不同的URL
我可以为每个按钮创建单独的按钮,但UILabel是通过编程方式填充的,因此我认为让文本响应点击可能是一个更好的选择。一种方法如下所示。
这些假设是:
- self.url是一个字符串数组,包含与每个
关联的URLUILabel
- 每个
ui标签
都已设置为数组中相应的索引标记
设置为标签的labelTapped:
处理程序touchUpInside
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的方式更适合它。最初我犹豫是否这样做,因为我的意图是创建一个类似于列表的东西,但按钮与标签的相似程度足以解决问题。