iOS - webViewDidStartLoad中canGoForward和canGoBack的问题

时间:2012-03-06 21:42:38

标签: ios uiwebview

简单的概念,但它不起作用。我的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中的链接,它会转到该页面,但后退按钮仍处于禁用状态且无法点击。直到我点击其他链接后,后退按钮才会启用并开始工作。

为什么第一次去另一个页面时这不起作用,只能第二次使用?

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:3)

您的首页是否是设备上的实际网址或文件?当我开始使用loadHTMLString时,我遇到了这个问题,大概是因为实际上没有任何东西可以追溯到(我假设UI不会缓存页面内容,只是对页面的引用)。当我使用loadRequest时,它工作正常。也就是说,你需要像Aemsn所说的那样做。可以在this link找到一个好的教程。

答案 2 :(得分:1)

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

在实际加载下一页之前,

webViewDidStartLoad被调用。对于你正在做的事情,webViewDidFinishLoad更有意义。因此,当您第一次加载时,您无法返回(无需向前或向后加载任何内容)。第一次更改页面时,您仍然无法 - 仅加载一页(当前)。因此,第二次是它似乎有效。

答案 3 :(得分:0)

我遇到了同样的问题,我只想出来了。我假设您没有使用webView:loadRequest:选择器来加载webcontent?相反,你可能使用了 webView:loadData:MIMEType:textEncodingName:baseURL:loadHTMLString:baseURL:选择器。

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