禁用UIWebView中的链接?

时间:2010-01-20 03:06:28

标签: iphone uiwebview hyperlink

我正在将一些内容从网络加载到UIWebView,但我希望在UIWebView中禁用所有链接。这可能吗?我可以解析文本,但我正在寻找更容易的东西。

7 个答案:

答案 0 :(得分:53)

您可以UIWebView一个delegate并将-webView:shouldStartLoadWithRequest:navigationType:委托方法实施到return NO;(初始加载除外)。

这将阻止用户查看除该单页之外的任何内容。

提供评论中要求的示例...从allowLoad=YES开始,然后:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    return allowLoad;
}

- (void)webViewDidFinishLoad:(UIWebView*)webView {
    allowLoad = NO;
}

答案 1 :(得分:11)

在Swift 4.0中测试:这种方法不需要额外的变量来测试这是否是初始加载。只需检查请求的类型(在本例中为LinkClicked),并在这种情况下返回false。否则只需返回true!

(当然要确保设置webView.delegate

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == .linkClicked {
        return false
    }
    return true
}

答案 2 :(得分:4)

您可以从网络视图中禁用数据检测。

[webView setDataDetectorTypes:UIDataDetectorTypeNone];

答案 3 :(得分:1)

对于swift 3:

尝试删除您不希望显示为webView.dataDetectorTypes

链接的类型
webView.dataDetectorTypes.remove(UIDataDetectorTypes.all)

答案 4 :(得分:0)

简单的答案适用于Swift 2.0:

yourWebView.dataDetectorTypes = UIDataDetectorTypes.None

只需在您定义和使用Web视图的视图控制器中实现它,它就能完美运行。

答案 5 :(得分:0)

我有类似的需求,在某些情况下仅仅使用webViewDidFinishLoad是不够的,所以我使用webViewDidStartLoad来涵盖所有情况:

func webViewDidStartLoad(webView: UIWebView) {
    startedLoading = true
}

func webViewDidFinishLoad(webView: UIWebView) {
    alreadyOpen = true
}

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if startedLoading && alreadyOpen {
        // do something
        return false
    }else if startedLoading && !alreadyOpen{
        return false
    }else if !startedLoading {
        return true
    }
    return true
}

在某些情况下,当加载html时,某些资源(如图像和DOM内部的一些重要资源)并未触发didFinishLoad方法,用户可以在此“短”间隔内导航。

答案 6 :(得分:0)

Swift 3.0的另一个答案:
只需为零检测即可检测到您的WebView初始代码的任何类型链接

yourWebView.dataDetectorTypes =  UIDataDetectorTypes(rawValue: 0)