如何在Xcode中的safari中打开webview中的任何链接?
我在我的应用程序中有一个webview,我想在web视图中的任何链接打开safari而不是web视图本身。
我在迅速编写应用程序,并已经看到了一些Objective-C的答案,但没有一个快速。
有人知道我该怎么做呢?
这在Swift中与Obj-C中基本相同:
首先,声明你的视图控制器符合UIWebViewDelegate
class MyViewController: UIWebViewDelegate
然后在View Controller中实现webViewShouldStartLoadingWithRequest:navigationType:
:
// Swift 1 & 2 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { switch navigationType { case .LinkClicked: // Open links in Safari UIApplication.sharedApplication().openURL(request.URL) return false default: // Handle other navigation types... return true } } // Swift 3 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { switch navigationType { case .linkClicked: // Open links in Safari guard let url = request.url else { return true } if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { // openURL(_:) is deprecated in iOS 10+. UIApplication.shared.openURL(url) } return false default: // Handle other navigation types... return true } }
最后,设置您的UIWebView
的委托,例如,在viewDidLoad
或在您的故事板:
webView.delegate = self
更新为swift 3
func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.linkClicked { UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil) return false } return true }
您需要在Web视图的委托中实现webViewShouldStartLoadingWithRequest:navigationType
方法,然后查找要在Safari中打开的链接。 如果使用[[UIApplication sharedApplication]openURL:]
将它们发送到操作系统,它们将在Safari中打开。