web-dev-qa-db-ja.com

Swift Safariでリンクを開く

現在、アプリ内のWebViewでリンクを開いていますが、代わりにSafariでリンクを開くオプションを探しています。

113
Fabian Boulegue

「Swiftに組み込まれている」わけではありませんが、標準のUIKitメソッドを使用して実行できます。 UIApplicationopenUrl() を見てください。

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)    
267
Mike S

IOS 9以降の新機能では、ユーザーにSFSafariViewControllerを提示できます(ドキュメント here を参照)。基本的に、ユーザーをアプリから離れることなく、ユーザーをSafariに送信するすべての利点が得られます。新しいSFSafariViewControllerを使用するには:

import SafariServices

イベントハンドラーのどこかで、ユーザーに次のようなサファリビューコントローラーを提示します。

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

サファリビューは次のようになります。

enter image description here

51
manncito

Swift 4:の更新(マルコウェーバーの功績)

if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.shared.openURL(requestUrl as URL) 
}

または、guardを使用して、Swiftスタイルをさらに使用します。

guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
    return
}

UIApplication.shared.openURL(requestUrl as URL) 

スウィフト3:

次の方法で、NSURLをオプションとして暗黙的に確認できます。

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

Swift 3&IOS 10.2

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

スウィフト3&IOS 10.2

12
ramchandra n

iOS 10以降では、次を使用する必要があります。

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)
    }
9
Samira Ekrami

Swift 1.2の場合:

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

Swift 2.0の場合:

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

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

}

0
guevara lopez