将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是非常干净的!