Adding back button to navigation bar

38,667

Solution 1

If you're using a navigation controller:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[[self navigationController] pushViewController:_myViewController animated:YES];
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = _backButton;
[_backButton release], _backButton = nil;
[_myViewController release], _myViewController = nil;

If you're not using a navigation controller, look into the Three20 style components to make custom bar buttons.

Solution 2

I have done it the following way

In viewDidLoad Method I have this code:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)];
    navBar.delegate = self;

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
    [navBar pushNavigationItem:backItem animated:NO];
    [backItem release];

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"];
    [navBar pushNavigationItem:topItem animated:NO];
    topItem.leftBarButtonItem = nil;
    [topItem release];

    [self.view addSubview:navBar];
    [navBar release];

Then add conformity to UINavigationBarDelegate protocol in the header and implement the delegate method this way:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked

    return NO;
}
Share:
38,667
4thSpace
Author by

4thSpace

Updated on June 28, 2020

Comments

  • 4thSpace
    4thSpace almost 4 years

    I've added a navigation bar to a UIViewController. It is displayed from another UIViewController only. I'd like to have a left side back button that is shaped similar to an arrow, just like the normal navigation bar back button. It seems I can only add a bar button through IB. I'm guessing the back button needs to be added programmatically. Any suggestions on how I should do this?

    Currently, in the RootController, I push another UIViewController (viewB) by simply doing an addSubView. In viewB, I want to display the navigation bar. The app is view based, not navigation controller based.

  • Alex Reynolds
    Alex Reynolds about 14 years
    You'll need to tweak it to your particular project's code. You might want to edit your question to include relevant code snippets, where you are in your first view controller and pushing your second view controller.
  • 4thSpace
    4thSpace about 14 years
    I'd rather stay away from 3rd party frameworks. All I need is to add a back button that has the shape of a regular back button. If that isn't possible, I'll just use a "done" button style or something similar.
  • Alex Reynolds
    Alex Reynolds about 14 years
    Apple doesn't have a back-arrow button available except for navigation. So you'll either have to use your own custom button, a third-party option, or a different button style.
  • 4thSpace
    4thSpace about 14 years
    Thanks. Since I did use addSubView, when I pop that view (removeFromSuperView), the previous UIViewControllers viewWillAppear doesn't fire. I'm guessing I'll need to use an event?
  • Alex Reynolds
    Alex Reynolds about 14 years
    You're not popping or pushing unless you use a navigation controller. If you use addSubview etc. you have to manage your own view appearance.
  • viplezer
    viplezer almost 11 years
    did you use it in any app that you sent to the Apple? if yes, did they approve it?
  • Hassan Rasheed
    Hassan Rasheed over 6 years
    Yes, there is no private API used in this approach