【问题标题】:iOS - problems with canGoForward and canGoBack in webViewDidStartLoadiOS - webViewDidStartLoad 中的 canGoForward 和 canGoBack 问题
【发布时间】:2012-03-24 10:39:47
【问题描述】:

简单的概念,但它不起作用。我的UIWebView 中有两个按钮,一个后退按钮和一个前进按钮。后退按钮调用 [self.webView goBack] 和前进 [self.webView goForward]

现在我基本上想知道UIWebView 是否可以返回。如果是这样,则启用后退按钮,让它返回,前进按钮也是如此。

-(void)webViewDidStartLoad:(UIWebView *)webView
{    
    if([self.webView canGoForward]) {
        [forwardArrowBtn setEnabled:YES];
    } else {
        [forwardArrowBtn setEnabled:NO];
    }

    if([self.webView canGoBack]) {
        [backArrowBtn setEnabled:YES];
    } else {
        [backArrowBtn setEnabled:NO];
    }
}

问题是这在第一次加载时不起作用。例如:我单击UIWebView 中的一个链接,它转到页面,但后退按钮仍然被禁用且不可单击。直到我点击另一个链接,后退按钮才会显示启用并开始工作。

为什么第一次转到其他页面时不起作用,第二次才起作用?

【问题讨论】:

    标签: ios uiwebview


    【解决方案1】:

    我解决了这个问题,不仅将按钮设置代码放在 webViewDidStartLoad 中。编写一个方法,从 webViewDidStartLoad、webViewDidFinishLoad 和 shouldStartLoadWithRequest 中调用。与我的应用完美配合。

    【讨论】:

    【解决方案2】:

    您的第一页是您设备上的实际网络位置或文件吗?当我开始使用 loadHTMLString 时,我遇到了这个问题,大概是因为真的没有任何东西可以返回(我假设 UI 没有缓存页面内容,只是对页面的引用)。当我使用 loadRequest 时,它工作正常。也就是说,您确实需要按照 Aemsn 的说明进行操作。一个很好的教程可以在this link找到。

    【讨论】:

      【解决方案3】:

      在进行随机网络搜索时来到这里,回答为什么它只能在第二次工作的“基本”问题:

      webViewDidStartLoad 在您实际加载下一页之前被调用。对于您正在做的事情, webViewDidFinishLoad 更有意义。因此,当您进行第一次加载时,您不能返回(前向或后向均未加载任何内容)。当您第一次更改页面时,您仍然不能 - 仅加载一个页面(当前)。因此,第二次是在它看起来有效的时候。

      【讨论】:

        【解决方案4】:

        我也遇到了同样的问题,我只是想通了。我假设您没有使用webView:loadRequest: 选择器来加载网页内容?相反,您可能使用了 webView:loadData:MIMEType:textEncodingName:baseURL:loadHTMLString:baseURL: 选择器。

        这正是我所做的。如果您改用 webView:loadRequest: 选择器,它会起作用 - 至少它对我有用。

        【讨论】:

          猜你喜欢
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 2013-03-29
          • 2011-12-07
          • 1970-01-01
          • 2016-06-16
          • 2014-11-19
          • 1970-01-01
          相关资源
          最近更新 更多