2012-03-06 101 views
5

簡單的概念,但它不工作。我在我的UIWebView中有兩個按鈕,一個後退按鈕和一個前進按鈕。後退按鈕調用[self.webView goBack]轉發[self.webView goForward]iOS - canGoForward和CanGoBack在webViewDidStartLoad中的問題

現在我想知道,如果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中的鏈接,它會轉到頁面,但後退按鈕仍處於禁用狀態,無法點擊。直到我點擊另一個鏈接後,後退按鈕顯示啓用並開始工作。

第一次進入另一個頁面時,這種方式不起作用,只能在第二次使用?

回答

12

我不僅在webViewDidStartLoad中設置了按鈕設置代碼,我解決了這個問題。編寫一個方法,並從webViewDidStartLoad,webViewDidFinishLoad和shouldStartLoadWithRequest中調用它。完美地與我的應用程序一起工作。

+0

這是一個解決更簡單的解決方案嗎?它確實有效,但是... – Romes 2012-03-06 22:52:52

+0

你能展示......還是更好地解釋......? – Morkrom 2013-08-12 22:37:38

+0

'webViewDidFinishLoad:'是檢查的正確位置。這個問題似乎是WebKit中的一個錯誤。有關詳細的解釋,請參見[http://stackoverflow.com/questions/18948373/why-is-uiwebview-cangoback-no-in-ios7 this SO question&answer] – Olie 2014-03-12 18:01:11

3

您的第一頁是您的設備上的實際Web位置或文件?當我用loadHTMLString開始時,我遇到了這個問題,大概是因爲實際上沒有任何東西可以回到(我假設UI不緩存頁面內容,只是對頁面的引用)。當我使用loadRequest時,它工作正常。這就是說,你需要像Aemsn所說的那樣做。一個很好的教程可以在this link找到。

1

已經來到這裏,而做一個隨機的網絡搜索,回答,爲什麼它只第二次「基地」的問題:

webViewDidStartLoad被稱爲之前你實際加載下一頁。對於你在做什麼,webViewDidFinishLoad更有意義。所以當你做第一次加載時,你不能回去(沒有任何加載前進或後退)。當您第一次更換頁面時,您仍然無法 - 僅加載一個頁面(當前)。因此,第二次開始似乎是在工作。

0

我有同樣的確切問題,我只是想通了。我假設你沒有使用webView:loadRequest:選擇器來加載web內容?相反,您可能使用了 webView:loadData:MIMEType:textEncodingName:baseURL:loadHTMLString:baseURL:選擇器。

這正是我所做的。如果你使用webView:loadRequest:選擇器,它將起作用 - 至少它對我來說是這樣。