Shane O'Seasnain
Shane O'Seasnain

Reputation: 3674

How can I add a url to an alert?

Is there a method to add an url for users looking for additional information? My alert looks like this

let alert = UIAlertController(title: "Alert details", message: "For more detailed information, click the link below", preferredStyle: UIAlertControllerStyle.Alert)
    // add url here
    let okayAction = UIAlertAction(title: "Ok", style: .Default) { (action) in
        print(action)
    }
    alert.addAction(okayAction)

The idea is to redirect them to a webpage and close the UIAlertController in the app

Upvotes: 4

Views: 7857

Answers (2)

Ivan Avdeenko
Ivan Avdeenko

Reputation: 11

let alert = UIAlertController(title: "Default Title", message: nil, preferredStyle: .alert)
let textView = UITextView()
textView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

let controller = UIViewController()

textView.frame = controller.view.frame
controller.view.addSubview(textView)
textView.backgroundColor = .clear

alert.setValue(controller, forKey: "contentViewController")

let height: NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 150)
alert.view.addConstraint(height)

let attributedString = NSMutableAttributedString(string: "http://movies.com")
let url = URL(string: "http://movies.com")

attributedString.setAttributes([.link: url ?? ""], range: NSMakeRange(0, attributedString.length))


textView.attributedText = attributedString
textView.isUserInteractionEnabled = true
textView.isEditable = false

// Set how links should appear: blue and underlined
textView.linkTextAttributes = [
    .foregroundColor: UIColor.blue,
    .underlineStyle: NSUnderlineStyle.single.rawValue
]

let okAction = UIAlertAction(title: "OK", style: .default) {
    UIAlertAction in
}
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) {
    UIAlertAction in
}

alert.addAction(okAction)
alert.addAction(cancelAction)

present(alert, animated: true, completion: nil)

from here: https://overcoder.net/q/1502030/кликабельный-url-на-uialertcontroller

Upvotes: 1

matt
matt

Reputation: 535850

You cannot add arbitrary interface to a UIAlertController. The title and message are not tappable. You cannot add further text. Instead, add another button (UIAlertAction) that directs them to the Web page. Either that, or use some other interface instead of a UIAlertController (for example, you can put up a presented view controller that looks like an alert).

Upvotes: 9

Related Questions