My code:
if let url = NSURL(string: \"www.google.com\") {
let safariViewController = SFSafariViewController(URL: url)
safariViewController.view.tintColor
I did a combination of Yuvrajsinh's & hoseokchoi's answers.
func openLinkInSafari(withURLString link: String) {
guard var url = NSURL(string: link) else {
print("INVALID URL")
return
}
/// Test for valid scheme & append "http" if needed
if !(["http", "https"].contains(url.scheme.lowercaseString)) {
let appendedLink = "http://".stringByAppendingString(link)
url = NSURL(string: appendedLink)!
}
let safariViewController = SFSafariViewController(URL: url)
presentViewController(safariViewController, animated: true, completion: nil)
}
Use WKWebView's method (starting iOS 11),
class func handlesURLScheme(_ urlScheme: String) -> Bool
Try checking scheme of URL before making an instance of SFSafariViewController.
Swift 3:
func openURL(_ urlString: String) {
guard let url = URL(string: urlString) else {
// not a valid URL
return
}
if ["http", "https"].contains(url.scheme?.lowercased() ?? "") {
// Can open with SFSafariViewController
let safariViewController = SFSafariViewController(url: url)
self.present(safariViewController, animated: true, completion: nil)
} else {
// Scheme is not supported or no scheme is given, use openURL
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
Swift 2:
func openURL(urlString: String) {
guard let url = NSURL(string: urlString) else {
// not a valid URL
return
}
if ["http", "https"].contains(url.scheme.lowercaseString) {
// Can open with SFSafariViewController
let safariViewController = SFSafariViewController(URL: url)
presentViewController(safariViewController, animated: true, completion: nil)
} else {
// Scheme is not supported or no scheme is given, use openURL
UIApplication.sharedApplication().openURL(url)
}
}
You can check for availability of http in your url string before creating NSUrl object.
Put following code before your code and it will solve your problem (you can check for https also in same way)
var strUrl : String = "www.google.com"
if strUrl.lowercaseString.hasPrefix("http://")==false{
strUrl = "http://".stringByAppendingString(strUrl)
}