开发者

Back button not appearing on UINavigationController

开发者 https://www.devze.com 2023-02-12 01:21 出处:网络
I have a UINavigationController setup in my AppDelegate: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

I have a UINavigationController setup in my AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {          
    // Add the navigation controller's view to the window and display.
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

In my RootViewController I am pushing another view onto the stack:

//Show the deals
    DealViewController *dvc = [[DealViewController alloc] initWithNibName:@"DealViewController" bundle:nil];
    [self.navigationController.navigationBar setHidden:NO];
    [self.navigationController pushViewController:dvc animated:YES];

The view shows up, but there is no back button that is added to my开发者_如何学C navigation bar. Why is this and how can I resolve it?


Are you setting self.title in RootViewController? Perhaps the UINavigationController doesn't have any text to put on the back button, so it omits it...?

Are you setting hidesBackButton = YES or backBarButtonItem = nil in DealViewController, or does it have a different leftBarButtonItem defined?


Try this:

DetailViewController *detailViewController = [[DetailViewController alloc] init];
UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle : @"Back"
                                                         style : UIBarButtonItemStyleDone
                                                        target : nil
                                                        action : nil];
self.navigationItem.backBarButtonItem = back;
[self.navigationController pushViewController : detailViewController animated : YES];
[detailViewController release];


You must think of the navigation controller as a stack of navigation controllers each controlling one screen full of information. You instantiate the navigation controller with the

-(id)initWithRootViewController:(UIViewController *)rootViewController

method. You specify the root view controller in this call. Then you add the navigation controller's view as a subview to the window, like you did before.

If you want to show your second screen you push another view controller on the stack by using

-(void)pushViewController:detailViewController animated:YES

method.


Using presentModalViewController to show the naviagtionController. Set the navagitionController bar button like so:

[navigationController.navigationBar.topItem setLeftBarButtonItem:
    [[[UIBarButtonItem alloc] initWithTitle: @"Back" 
                                      style: UIBarButtonItemStylePlain
                                     target: self
                                     action: @selector(dismisstheModal:)] autorelease]];


This happened to me because in my navigation controller's content controller I had set up some navigation controller behavior in viewDidLoad and in another class that inherits from my content controller, and the one that was being presented, i implemented a viewDidLoad as well, and forgot to call [super viewDidLoad] which thereby caused me to override the base class's viewDidLoad where I was setting up my navigation controller buttons. Oooops.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号