如何使用Swift在ios应用中添加带有标题的超链接?

时间:2019-02-22 01:19:19

标签: ios swift xcode

我想在UIAlertController中添加一个网站链接,以将其与我的字符串消息一起添加,这意味着我不使用文本字段 并且我需要添加带有标题标签的超链接来快速描述此链接。

所以它看起来就像一个可点击的按钮。

我到目前为止所做的一切都行不通

var mysite = <a href=LINK URL\">TEXT</a>
let messageTxt = "hello people thanks for installing my apps \(my site)"

示例

  

Vist About page here

2 个答案:

答案 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的初始值为空或只是空格。