我正在尝试开发一个在Swift中使用UIWebView的iOS应用程序,但是我需要它只能使用一个域,并且在UIWebView中点击的任何外部链接都可以在Safari中打开。 (E.G.所有指向http://example.com
的链接都将在UIWebView中打开,但在Safari中会打开http://twitter.com
的链接。
我在网上找到了几个解决方案但是唯一的Swift版本(在这里找到:UIWebView open links in Safari)可以打开Safari中的每个链接,我只想让外部链接这样做。
有人可以帮忙吗? 感谢。
答案 0 :(得分:7)
由于@ MattFlier的解决方案是正确的,但是没有使用最新的Swift编译器进行编译。解包NSURLRequest 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拖动到代表视图的UIViewController,然后确保委托函数的名称与" IBOutlet弱变量#34相同;像这样
您还需要确保您的视图控制器实现UIWebViewDelegate
class OfferDetailViewController : UIViewController, UIWebViewDelegate
{
...
然后在您的viewDidLoad()
方法中,您还需要像这样分配代理:
override func viewDidLoad() {
self.webView.delegate = self;
}
答案 1 :(得分:4)
我必须在Swift上比我想象的更好......
修改我最初找到的解决方案(在问题中链接),我想出了这个允许通过我的网址,但在Safari中打开任何外部网址的替代方案。
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,它应该可以正常工作(只要您用您的网址替换example.com
。
请对此评论进行投票,因为我整天都在搜索教程和论坛,并认为我的最终解决方案非常简洁!