Attualmente sto aprendo il collegamento nella mia app in una WebView, ma sto cercando un'opzione per aprire il collegamento in Safari.Swift Open Link in Safari
C'è un modo semplice per farlo in Swift?
Attualmente sto aprendo il collegamento nella mia app in una WebView, ma sto cercando un'opzione per aprire il collegamento in Safari.Swift Open Link in Safari
C'è un modo semplice per farlo in Swift?
Non è "cotto in Swift", ma è possibile utilizzare i metodi standard UIKit
per farlo. Dai uno sguardo allo UIApplication
's openUrl()
.
Swift 4
UIApplication.shared.open(URL(string : "http://www.stackoverflow.com")!, options: [:], completionHandler: { (status) in
})
Swift 3
UIApplication.shared.openURL(URL(string: "http://www.stackoverflow.com")!)
Swift 2,2
UIApplication.sharedApplication().openURL(NSURL(string: "http://www.stackoverflow.com")!)
È possibile controllare NSURL come opti onale implicitamente da:
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
Dovrebbe essere (requestUrl!) –
Amit, No, perché è fatto esplicitamente come ho spiegato è garantito che requestUrl esiste se let RequestUrl = ... – CodeOverRide
In realtà, lo è. In Swift 2. –
In Swift 1.2:
@IBAction func openLink {
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
}
In Swift 2.0:
UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)
Nuovo con iOS 9 e versioni successive è possibile presentare l'utente con un SFSafariViewController
(vedi documentazione here). Fondamentalmente ottieni tutti i vantaggi di inviare l'utente a Safari senza far uscire la tua app. Per utilizzare il nuovo SFSafariViewController solo:
import SafariServices
e da qualche parte in un gestore di eventi presentare l'utente con il controller della vista safari in questo modo:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
La vista safari sarà simile a questo:
Swift 3 & IOS 10.2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3 & IOS 10,2
Ricorda però che l'utilizzo di questa versione interromperà l'esecuzione della tua app su iOS 9 e precedenti, a meno che la tua versione non la controlli – CupawnTae
dal iOS 10 si dovrebbe usare:
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)
}
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)
}
}
}
C'è qualche possibilità nell'app store se aggiungiamo qualche URL di acquisto come questo? – Jan
'' 'UIApplication.shared.openURL (URL (stringa:" http://www.stackoverflow.com ")!)' '' –
In iOS 10.0 ora è necessario aggiungere opzioni e gestore: UIApplication.shared.open (URL (stringa: "http://www.google.com") !, opzioni: [:], completionHandler: nil) – gabicuesta