2012-03-06 10 views
5

Khái niệm đơn giản, tuy nhiên nó không hoạt động. Tôi có hai nút trong số UIWebView, nút quay lại và nút chuyển tiếp. Các nút quay lại gọi số [self.webView goBack] và chuyển tiếp [self.webView goForward].iOS - sự cố với canGoForward và canGoBack trong webViewDidStartLoad

Bây giờ tôi muốn biết về cơ bản nếu UIWebView có thể quay lại. Nếu vậy, sau đó kích hoạt nút quay lại, và để cho nó quay trở lại, và tương tự cho nút chuyển tiếp.

-(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]; 
    } 
} 

Sự cố này không hoạt động trên lần tải đầu tiên. Ví dụ: tôi nhấp vào liên kết trong số UIWebView, nó sẽ chuyển đến trang nhưng nút quay lại vẫn bị vô hiệu hóa và không thể nhấp được. Không cho đến khi tôi nhấp vào một liên kết khác sẽ hiển thị nút quay lại và bắt đầu hoạt động.

Cách tính năng này không hoạt động vào lần đầu tiên bạn truy cập một trang khác và chỉ hoạt động lần thứ hai?

Trả lời

12

Tôi đã giải quyết vấn đề này khi đặt mã cài đặt nút không chỉ trong webViewDidStartLoad. Viết một phương thức và gọi nó từ webViewDidStartLoad, webViewDidFinishLoad và shouldStartLoadWithRequest. Hoạt động hoàn hảo với ứng dụng của tôi.

+0

Đây có phải là công việc xung quanh để có giải pháp tương tự hơn không? Nó hoạt động tuy nhiên ... – Romes

+0

Bạn có thể cho thấy ... hoặc giải thích tốt hơn ...? – Morkrom

+0

'webViewDidFinishLoad:' là địa điểm chính xác của séc. Vấn đề dường như là một lỗi trong WebKit. Để có giải thích chi tiết, hãy xem [http://stackoverflow.com/questions/18948373/why-is-uiwebview-cangoback-no-in-ios7 câu hỏi & trả lời SO này] – Olie

3

Trang đầu tiên của bạn có phải là vị trí hoặc tệp trên web thực tế trên thiết bị của bạn không? Tôi có vấn đề này khi tôi bắt đầu với loadHTMLString, có lẽ bởi vì có thực sự không phải là bất cứ điều gì để quay trở lại (Tôi giả sử giao diện người dùng không cache nội dung trang, chỉ cần tham khảo đến trang). Khi tôi đang làm việc với một loadRequest, nó hoạt động tốt. Điều đó nói rằng, bạn cần phải làm như Aemsn đã nêu. Một hướng dẫn tốt có thể được tìm thấy tại this link.

1

Sau khi đến đây trong khi làm một tìm kiếm web ngẫu nhiên, để trả lời câu hỏi 'cơ sở' lý do tại sao nó chỉ hoạt động lần thứ hai:

webViewDidStartLoad được gọi trước bạn thực sự load trang tiếp theo. Đối với những gì bạn đang làm, webViewDidFinishLoad có ý nghĩa hơn. Vì vậy, khi bạn thực hiện tải đầu tiên của mình, bạn không thể quay lại (không có gì được tải về phía trước hoặc sau). Khi bạn thay đổi trang lần đầu tiên, bạn vẫn không thể - chỉ một trang (hiện tại) được tải. Vì vậy, lần thứ hai trở đi là khi nó xuất hiện để làm việc.

0

Tôi đã có cùng một vấn đề chính xác và tôi đã tìm ra. Tôi cho rằng bạn không sử dụng công cụ chọn webView:loadRequest: để tải nội dung web? Thay vào đó, bạn có thể đã sử dụng webView:loadData:MIMEType:textEncodingName:baseURL: hoặc bộ chọn loadHTMLString:baseURL:.

Đó chính xác là những gì tôi đã làm. Nếu bạn sử dụng bộ chọn webView:loadRequest: thay vào đó, nó sẽ hoạt động - ít nhất nó đã làm cho tôi.