我想在UIAlertController中添加一个网站链接,以将其与我的字符串消息一起添加,这意味着我不使用文本字段 并且我需要添加带有标题标签的超链接来快速描述此链接。
所以它看起来就像一个可点击的按钮。
我到目前为止所做的一切都行不通
var mysite = <a href=LINK URL\">TEXT</a>
let messageTxt = "hello people thanks for installing my apps \(my site)"
示例
答案 0 :(得分:2)
您可以尝试在文本字段中使用属性字符串,然后将其添加到UIAlertView中。
第1步:创建属性字符串的扩展名以找到链接,并为链接文本添加适当的样式。
extension NSMutableAttributedString {
public func SetAsLink(textToFind:String, linkURL:String) {
let foundRange = self.mutableString.range(of: textToFind)
if foundRange.location != NSNotFound {
self.addAttribute(.link, value: linkURL, range: foundRange)
}
}
}
第2步:创建属性字符串,然后向其中添加样式。
let attributedString = NSMutableAttributedString(string:"Please Open this LINK!")
attributedString.SetAsLink(textToFind: "LINK", linkURL: "http://stackoverflow.com")
第3步:创建警报视图
let alert: UIAlertView = UIAlertView(title: "Title", message: "message",
delegate: self, cancelButtonTitle: "OK", otherButtonTitles: "Cancel")
步骤4:创建不可编辑的文本字段
let Txt:UITextView = UITextView(frame:CGRect(x: 0, y: 0, width: 100, height: 100))
第5步:将属性字符串设置为文本字段
Txt.attributedText = attributedString;
第6步:使txt字段不可编辑并检测链接类型
Txt.isEditable=false;
Txt.dataDetectorTypes = UIDataDetectorTypes.link;
第7步:将文本字段设置为警报并显示警报
Txt.isEditable=false;
Txt.dataDetectorTypes = UIDataDetectorTypes.link;
总结
显示警报:
let attributedString = NSMutableAttributedString(string:"Please Open this LINK!")
attributedString.SetAsLink(textToFind: "LINK", linkURL: "http://stackoverflow.com")
let alert: UIAlertView = UIAlertView(title: "Title", message: "message",
delegate: self, cancelButtonTitle: "OK", otherButtonTitles: "Cancel")
let Txt:UITextView = UITextView(frame:CGRect(x: 0, y: 0, width: 100, height: 100))
Txt.attributedText = attributedString;
Txt.isEditable=false;
Txt.dataDetectorTypes = UIDataDetectorTypes.link;
alert.setValue(Txt, forKey: "accessoryView")
alert.show()
扩展属性字符串
extension NSMutableAttributedString {
public func SetAsLink(textToFind:String, linkURL:String) {
let foundRange = self.mutableString.range(of: textToFind)
if foundRange.location != NSNotFound {
self.addAttribute(.link, value: linkURL, range: foundRange)
}
}
}
P.S:别忘了让您的视图控制器成为UIAlertViewDelegate。
这是sample项目
如果您正在使用CDAlertView,则可以尝试以下操作:
let alert = CDAlertView(title: "Awesome Title", message: "Are you in?!", type: .notification)
let doneAction = CDAlertViewAction(title: "Sure! ")
alert.add(action: doneAction)
let nevermindAction = CDAlertViewAction(title: "Nevermind ")
alert.add(action: nevermindAction)
let myCustomView = UIVIew(frame: CGRectMake(0,0,280,200))
let Txt:UITextView = UITextView(frame:CGRect(x: 0, y: 0, width: 100, height: 100))
Txt.attributedText = attributedString;
Txt.isEditable=false;
Txt.dataDetectorTypes = UIDataDetectorTypes.link;
myCustomView.addSubview(Txt)
alert.customView = myCustomView
alert.show()
答案 1 :(得分:0)
最简单的方法是将URL定义为URL数据类型,并使用UIApplication:openURL方法在Safari中打开它。
在Swift中,这可能类似于(不是从应用程序发出的代码):
let url = URL(string:"http://www.foobar.com")
UIApplication.shared.open(url)
这将在手机上启动Safari并在Safari中打开URL。如果您想在应用中执行此操作,则需要启动网络视图并在该视图中打开URL。由于您是从组件中构建URL,因此您需要使用其他URL方法,而不是上面的简单示例。
但是,如果您只想感谢用户,为什么要使用Web链接?仅使用UILabel并将其text属性设置为您想要告诉用户的内容就更容易了。那将比Web URL更为简单,并且更像iOS。该UILabel的初始值为空或只是空格。