現在、アプリWebView
のリンクをで開いていますが、代わりにSafariでリンクを開くオプションを探しています。
現在、アプリWebView
のリンクをで開いていますが、代わりにSafariでリンクを開くオプションを探しています。
回答:
「Swiftに組み込まれている」わけではありませんが、標準のUIKit
方法を使用して実行できます。UIApplicationの(非推奨)とを見てください。openUrl(_:)
open(_:options:completionHandler:)
Swift 4 + Swift 5(iOS 10以降)
guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.open(url)
Swift 3(iOS 9以下)
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)
iOS 9以降の新機能では、ユーザーにaを表示できますSFSafariViewController
(こちらのドキュメントを参照)。基本的に、ユーザーをアプリから離れさせることなく、ユーザーをSafariに送ることのすべての利点を享受できます。新しいSFSafariViewControllerを使用するには:
import SafariServices
そして、イベントハンドラーのどこかに、次のようなSafariビューコントローラーがユーザーに表示されます。
let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)
サファリビューは次のようになります。
sharedApplication
アプリ拡張機能のプロパティへのアクセスは禁止されています。以上の場合:developer.apple.com/library/archive/documentation/General/...
Swift 4の更新:(Marco Weberへのクレジット)
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
UIApplication.shared.openURL(requestUrl as URL)
}
または、以下を使用してより迅速なスタイルで進みますguard
:
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)
}
if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { UIApplication.shared.openURL(requestUrl as URL) }
Swift 3およびIOS 10.2
UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)
Swift 3およびIOS 10.2
スウィフト5
Swift 5:canOpneURL
有効かどうかを使用して確認し、開いていることを確認します。
guard let url = URL(string: "https://iosdevcenters.blogspot.com/") else {
return
}
if UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
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)
}
}