views:

937

answers:

4

I'm having an incredibly frustrating problem that appears to be a bug, but I have a very hard time believing no one else has come across this. My application's root view controller is a UITabBarController, where each tab is a UINavigationController. Everything works great.

Now I've come to a place where I want to edit the stack, so I rearrange the viewControllers of the current navigation controller and then do:

[self.navigationController setViewControllers:newViewControllers animate:YES];

The stack is correctly popped/pushed to the top view controller, but the navigation bar does not update to the current view controller and seems to remain exactly as it did with the viewController before the pop. If I do:

[self.navigationController popToViewController:someViewController animate:YES];

Everything works perfectly. Has anyone ever come across this before? Is there a workaround? Something I'm doing wrong?

+1  A: 

Two equally ugly work arounds.

First, If:

[self.navigationController popToViewController:someViewController animate:YES];

Works well, try pushing an extra viewcontroller on the stack and then call:

[self.navigationController popToViewController:someViewController animate:NO];

Meaning you should get to the vc you want without any animation.

Second,

Before setting the stack, set the leftButtonBarItem = nil; Effectively removing the old view controller's button. In fact if the title is wrong, change that too.

Neither is exactly clean but may get you the desired results.

Corey Floyd
A: 

You can also set your root view controller as the UINavigationController's delegate like:

@interface YourViewController : UIViewController <UINavigationControllerDelegate> {

and then in the didShowViewController delegate method you manually set the available view controllers:

- (void)navigationController:(UINavigationController *)navigationController 
   didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {

[[viewController navigationController] setViewControllers:[[viewController navigationController] viewControllers]];
}

Let me know if this works in your environment!

Colins
A: 

Apple appears to have fixed this in the newest SDK

beinstein
A: 

[self.navigationController setViewControllers:newViewControllers animate:NO]; this may help you. But I don't know the reason