Obecnie otwieram łącze w mojej aplikacji w WebView, ale szukam opcji, aby otworzyć link w Safari.Swift Open Link w Safari
Czy istnieje prosty sposób na zrobienie tego w Swift?
Obecnie otwieram łącze w mojej aplikacji w WebView, ale szukam opcji, aby otworzyć link w Safari.Swift Open Link w Safari
Czy istnieje prosty sposób na zrobienie tego w Swift?
Nie jest "wypiekany w Swift", ale można użyć standardowych metod, aby to zrobić. Spójrz na 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")!)
Można sprawdzić bibliotece NSURL jak Opti onal pośrednio przez:
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.sharedApplication().openURL(requestUrl)
}
Powinno być (requestUrl!) –
Amit, Nie, ponieważ jest to jawnie wykonane, jak to wyjaśniłem, to jest gwarancja, że requestUrl istnieje, jeśli requestUrl = ... – CodeOverRide
W rzeczywistości jest. W Swift 2. –
w Swift 1.2:
@IBAction func openLink {
let pth = "http://www.google.com"
if let url = NSURL(string: pth){
UIApplication.sharedApplication().openURL(url)
}
w Swift 2.0:
UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)
nowy z iOS 9 i wyższe można przedstawić użytkownikowi SFSafariViewController
(patrz dokumentacja here). Zasadniczo masz wszystkie zalety wysyłania użytkownika do Safari bez konieczności opuszczania aplikacji. Aby korzystać z nowej SFSafariViewController tylko:
import SafariServices
i gdzieś obsługi zdarzeń prezentować użytkownikowi kontrolera widoku safari jak to:
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
Widok safari będzie wyglądać mniej więcej tak:
Swift 3 & IOS 10,2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3 & IOS 10,2
Należy jednak pamiętać, że korzystanie z tej wersji spowoduje zatrzymanie działania aplikacji na iOS 9 i wcześniejszych wersjach, chyba że w wersji sprawdzono – CupawnTae
od iOS 10 należy użyć:
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)
}
}
}
Czy jest jakaś szansa ze sklepu z aplikacjami, jeśli dodamy kupujący adres URL w ten sposób? – Jan
'' 'UIApplication.shared.openURL (URL (ciąg:" http://www.stackoverflow.com ")!)' '' –
W iOS 10.0 musisz teraz dodać opcje i obsługę: UIApplication.shared.open (URL (ciąg: "http://www.google.com") !, opcje: [:], completeHandler: nil) – gabicuesta