将UIWebView限制为特定URL(Swift)

时间:2014-12-13 22:40:25

标签: ios xcode uiwebview safari

我正在尝试开发一个在Swift中使用UIWebView的iOS应用程序,但是我需要它只能使用一个域,并且在UIWebView中点击的任何外部链接都可以在Safari中打开。 (E.G.所有指向http://example.com的链接都将在UIWebView中打开,但在Safari中会打开http://twitter.com的链接。

我在网上找到了几个解决方案但是唯一的Swift版本(在这里找到:UIWebView open links in Safari)可以打开Safari中的每个链接,我只想让外部链接这样做。

有人可以帮忙吗? 感谢。

2 个答案:

答案 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相同;像这样

What this looks like

需要确保您的视图控制器实现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

请对此评论进行投票,因为我整天都在搜索教程和论坛,并认为我的最终解决方案非常简洁!