如何在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中打开。