2014-09-20 7 views

Odpowiedz

154

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

Czy jest jakaś szansa ze sklepu z aplikacjami, jeśli dodamy kupujący adres URL w ten sposób? – Jan

+2

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

+5

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

15

Można sprawdzić bibliotece NSURL jak Opti onal pośrednio przez:

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

Powinno być (requestUrl!) –

+3

Amit, Nie, ponieważ jest to jawnie wykonane, jak to wyjaśniłem, to jest gwarancja, że ​​requestUrl istnieje, jeśli requestUrl = ... – CodeOverRide

+0

W rzeczywistości jest. W Swift 2. –

2

w Swift 1.2:

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

w Swift 2.0:

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

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:

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

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

1

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

}

Powiązane problemy