J'ouvre actuellement le lien dans mon application dans une WebView
, mais je cherche une option pour ouvrir le lien dans Safari à la place.
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)
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:
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)
}
Swift 3 & IOS 10.2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3 & IOS 10.2
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)
}
Dans Swift 1.2:
@IBAction func openLink {
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
}
Dans Swift 2.0:
UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)
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)
}
}
}