2014-09-20 11 views
65

Şu anda bir WebView uygulamasında uygulamasındaki bağlantıyı açıyorum, ancak bağlantıyı Safari'de açmak için bir seçenek arıyorum.Swift Open Link in Safari

Swift'de bunu yapmanın kolay bir yolu var mı?

cevap

154

"Swift'de pişmiş" değil, ancak bunu yapmak için standart UIKit yöntemlerini kullanabilirsiniz. UIApplication's openUrl()'a bir göz atın.

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")!) 
+0

Bu satın alma URL'sini eklediğimizde uygulama mağazasından herhangi bir şans var mı? – Jan

+2

'' 'UIApplication.shared.openURL (URL (string:" http://www.stackoverflow.com ")!)' '' –

+5

iOS 10.0'da artık seçenekler ve işleyici eklemeniz gerekir: UIApplication.shared.open (URL (string: "http://www.google.com") !, options: [:], completionHandler: nil) – gabicuesta

15

Sen opti olarak NSURL kontrol edebilirsiniz onal dolaylı için:

Swift 1.2 ile
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { 
    UIApplication.sharedApplication().openURL(requestUrl) 
} 
+0

Olması gereken (requestUrl!) –

+3

Amit, Hayır, çünkü açıkladığım gibi açık bir şekilde yapıldığından, requestUrl = request olsun, eğer requestUrl = ... – CodeOverRide

+0

Aslında, öyle olsun. Swift 2. –

2

:

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

: IOS 9

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

yeni ve daha yükseğe (belgelere bakın bir SFSafariViewController kullanıcıya mevcut olabilir here). Temel olarak, kullanıcıyı uygulamanızı bırakmadan Safari'ye göndermenin tüm avantajlarını elde edersiniz.

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

safari görünümü bu gibi bir şey olacaktır:

böyle safari görünümü kontrolörü ile kullanıcıya sunmak

import SafariServices 

ve yerde bir olay işleyicisinde: sadece yeni SFSafariViewController kullanmak için

enter image description here

11

Swift 3 & IOS 10.2

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

Swift 3 & IOS 10,2

+0

Ancak, bu sürümü kullanmanın, sürümü kontrol etmediğiniz sürece iOS 9 ve önceki sürümlerde uygulamanızı durduracağını unutmayın. – CupawnTae

1

iOS 10 beri kullanmalıdır:

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) 
    } 
0

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) 
    } 
} 

}