Jameson
Jameson

Reputation: 4266

Replace custom back button with default

There is a lot of questions about how to replace the default back button with a custom back button, but none that I know of about how to replace a custom back button with the default.

I have a web view that when [self.webView canGoBack] == YES, a custom back button appears. But after you go back all the way, that custom back button is still there, rather than the default. Is there something I can do to replace my custom back button with the default when [self.webView canGoBack] == NO?

Here is my relevant code:

@interface MerchViewController () <UIWebViewDelegate>

@property UIWebView *webView;

@end

@implementation MerchViewController

- (instancetype)init
{
self = [super init];
if (self) {
    self.navigationItem.title = @"Merchandise";
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
UIWebView *webView = [[UIWebView alloc] init];
webView.scalesPageToFit = YES;
self.view = webView;
self.webView = webView;
webView.delegate = self;
[self setURL];

}

- (void)updateBackButton {

if ([self.webView canGoBack]) {
    {
        [self.navigationItem setHidesBackButton:YES animated:NO];
        //UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backTickets"] style:UIBarButtonItemStylePlain target:self action:@selector(backWasClicked:)];
        UIBarButtonItem *backItem = [[UIBarButtonItem alloc] backButtonWith:@"Back" tintColor:[UIColor orangeColor] target:self andAction:@selector(backWasClicked:)];
        backItem.tintColor = [UIColor orangeColor];
        [self.navigationItem setLeftBarButtonItem:backItem animated:NO];
    }
}

else {
    /*
 [self.navigationItem setHidesBackButton:YES animated:NO];
 //UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backTickets"] style:UIBarButtonItemStylePlain target:self action:@selector(backWasClicked:)];
 UIBarButtonItem *backItem = [[UIBarButtonItem alloc] backButtonWith:@"Fan Zone" tintColor:[UIColor orangeColor] target:self andAction:@selector(openMenu:)];
 backItem.tintColor = [UIColor orangeColor];
 [self.navigationItem setLeftBarButtonItem:backItem animated:NO];
     */
}


}

- (void)webViewDidStartLoad:(UIWebView *)webView {
[self updateBackButton];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
[self updateBackButton];
[_spinner stopAnimating];
}

- (void)backWasClicked:(id)sender {
if ([self.webView canGoBack]) {
    [self.webView goBack];
}
}

- (void)setURL
{
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.lawlorscustom.com/omaha-lancers-hockey"]];
NSLog(@"loadRequest: %@", req);
[(UIWebView *)self.view loadRequest:req];

}

@end

The "else" portion in "updateBackButton" is commented out because if I don't comment it out, when the view first loads there are two back buttons overlapping.

Upvotes: 1

Views: 449

Answers (1)

Jameson
Jameson

Reputation: 4266

After struggling for a while, the answer was to do:

[self.navigationItem setHidesBackButton:NO animated:NO];

self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

Upvotes: 1

Related Questions