Search code examples
iphoneuiwebviewuiwebviewdelegate

iPhone - How to have a custom browser be able to detect if back/forward buttons need to be enabled/disabled


Hey guys! I have a tumblr app that I am developing, and I have a button that pushes a modal view that contains a webview and a toolbar on the bottom with refresh, back, forward and done buttons. The back forward and refresh buttons work, however I want to be able to tell if the webview can actually go back/forward and if not, disable the button..I have tried the code below, and the image nor the enable/disable changes.

- (IBAction)refreshPage {
    [signUpWebView reload];
}

- (IBAction)goBack {
    [signUpWebView goBack];
}

- (IBAction)goForward {
    [signUpWebView goForward];
}


-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    // Enable or disable back
    if ([signUpWebView canGoBack]) {
        [backOnePage setEnabled:YES];
        backOnePage.image = [UIImage imageNamed:@"backButton"];
    } else {
        [backOnePage setEnabled:NO];
        backOnePage.image = [UIImage imageNamed:@"backButtonDisabled"];
    }

    // Enable or disable forward
    if ([signUpWebView canGoForward]) {
        [forwardOnePage setEnabled:YES];
        forwardOnePage.image = [UIImage imageNamed:@"forwardButton"];
    } else {
        [forwardOnePage setEnabled:NO];
        forwardOnePage.image = [UIImage imageNamed:@"forwardButtonDisabled"];
    }

}

Any recommendations would be greatly appreciated!


Solution

  • I recommend binding the forward and backward button directly to the UIWebview.

    enter image description here

    Automatically enable and disable like this:

    - (void)webViewDidStartLoad:(UIWebView *)mwebView {
        backButton.enabled = (webView.canGoBack);
        forwardButton.enabled = (webView.canGoForward);
    }
    
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        backButton.enabled = (webView.canGoBack);
        forwardButton.enabled = (webView.canGoForward);
    }