将UIWebView限制为特定URL(Swift)

Mat*_*ler 4 safari xcode uiwebview ios

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

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

有人可以帮忙吗?谢谢.

Ben*_*n H 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
}
Run Code Online (Sandbox Code Playgroud)

是的,为了解决这个问题,您可以将UIWebView控制+拖动到代表视图的UIViewController,然后确保委托函数的名称与"IBOutlet weak var"相同,就像这样

这看起来像什么

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

class OfferDetailViewController : UIViewController, UIWebViewDelegate
{
    ...
Run Code Online (Sandbox Code Playgroud)

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

override func viewDidLoad() {
    self.webView.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*ler 5

我在Swift上的进步肯定比我想象的要好...

修改最初找到的解决方案(在问题中链接)后,我想到了可以通过我的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
}
Run Code Online (Sandbox Code Playgroud)

不要忘记将这段代码从UIWebView委派给View Controller,并且它应该可以正常工作(只要将其替换example.com为URL)即可。

由于我整天都在教程和论坛中进行搜索,因此请对此评论投票,并认为我的最终解决方案是一种非常干净的解决方案!