Adding back button to navigation bar
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;
}
4thSpace
Updated on June 28, 2020Comments
-
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 about 14 yearsYou'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 about 14 yearsI'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 about 14 yearsApple 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 about 14 yearsThanks. 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 about 14 yearsYou'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 almost 11 yearsdid you use it in any app that you sent to the Apple? if yes, did they approve it?
-
Hassan Rasheed over 6 yearsYes, there is no private API used in this approach