web-dev-qa-db-fra.com

Swift Open Link dans Safari

J'ouvre actuellement le lien dans mon application dans une WebView, mais je cherche une option pour ouvrir le lien dans Safari à la place.

96
Fabian Boulegue

Ce n'est pas "cuit à l'intérieur de Swift", mais vous pouvez utiliser les méthodes UIKit standard pour le faire. Jetez un coup d'œil à UIApplication 'S openUrl() .

Swift 4

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.open(url)

Swift 3

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.openURL(url)

Swift 2.2

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)    
228
Mike S

Nouveau avec iOS 9 et supérieur, vous pouvez présenter à l'utilisateur une SFSafariViewController (voir documentation ici ). Fondamentalement, vous bénéficiez de tous les avantages d'envoyer l'utilisateur sur Safari sans lui faire quitter votre application. Pour utiliser le nouveau SFSafariViewController, il suffit de:

import SafariServices

et quelque part dans un gestionnaire d’événements, présente à l’utilisateur le contrôleur de vue safari comme ceci:

let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)

La vue safari ressemblera à quelque chose comme ceci:

 enter image description here

45
manncito

MISE À JOUR pour Swift 4: (crédit à Marco Weber)

if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.shared.openURL(requestUrl as URL) 
}

OU optez pour plus de style Swift en utilisant guard:

guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
    return
}

UIApplication.shared.openURL(requestUrl as URL) 

Swift 3:

Vous pouvez vérifier NSURL comme facultatif implicitement par: 

if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.sharedApplication().openURL(requestUrl)
}
18
CodeOverRide

Swift 3 & IOS 10.2

UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)

Swift 3 & IOS 10.2

11
ramchandra n

depuis iOS 10, vous devez utiliser:

guard let url = URL(string: linkUrlString) else {
        return
    }

    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }
8
Samira Ekrami

Dans Swift 1.2:

@IBAction func openLink {    
    let pth = "http://www.google.com"
    if let url = NSURL(string: pth){
        UIApplication.sharedApplication().openURL(url)
}
2
Amit Kalra

Dans Swift 2.0:

UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)
1
Kaptain

IOS 11.2 Swift 3.1- 4

let webView = WKWebView()
override func viewDidLoad() {
    super.viewDidLoad()
    guard let url = URL(string: "https://www.google.com") else { return }
    webView.frame = view.bounds
    webView.navigationDelegate = self
    webView.load(URLRequest(url: url))
    webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
    view.addSubview(webView)
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated  {
        if let url = navigationAction.request.url,
            let Host = url.Host, !Host.hasPrefix("www.google.com"),
            UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url)
            print(url)
            print("Redirected to browser. No need to open it locally")
            decisionHandler(.cancel)
        } else {
            print("Open it locally")
            decisionHandler(.allow)
        }
    } else {
        print("not a user click")
        decisionHandler(.allow)
    }
}

}

0
guevara lopez