将UIWebView限制到特定的URL(Swift)

我试图开发一个iOS应用程序,其特点是在Swift中的UIWebView,但是我需要它只与一个域一起工作,并且任何外部链接点击在该UIWebView中打开Safari。 (EG所有到http://example.com链接都将在UIWebView中打开,但是在http://twitter.com的链接将在Safari中打开)。

我在网上find了一些解决scheme,但唯一的Swift版本(在这里find: Safari中的UIWebView打开链接 )可以打开Safari中的每一个链接,我只是想让外部的链接去做。

谁能帮忙? 谢谢。

由于@ MattFlier的解决scheme是正确的,但不能用最新的Swift编译器进行编译。 打开NSURLRequest URL属性非常重要,因此更新的解决scheme是:

 func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.LinkClicked { if (request.URL!.host! == "example.com"){ return true } else { UIApplication.sharedApplication().openURL(request.URL!) return false } } return true } 

是的,钩住这个,你可以控制+拖动你的UIWebView到表示视图的UIViewController,然后确保委托函数的命名方式与“IBOutlet weak var”相同,如下所示

这看起来像什么

需要确保你的视图控制器实现了UIWebViewDelegate

 class OfferDetailViewController : UIViewController, UIWebViewDelegate { ... 

然后在你的viewDidLoad()方法中,你也需要像这样分配委托:

 override func viewDidLoad() { self.webView.delegate = self; } 

我必须在Swift上比我想象的要好

修改我最初find的解决scheme(在问题中链接),我想出了这个替代scheme,它允许通过我的URL,但在Safari中打开任何外部URL。

 func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == UIWebViewNavigationType.LinkClicked { if (request.URL.host! == "example.com"){ return true } else { UIApplication.sharedApplication().openURL(request.URL) return false } } return true } 

不要忘记把这个代码从UIWebView委托给View Controller,它应该可以正常工作(只要你用你的URLreplaceexample.com

请把这个评论投给我,因为我已经花了整整一天的时间search教程和论坛,并认为我的最终解决scheme是非常干净的!