Q:

How to add a global right bar button (UINavigationController) in Three20's AppDelegate

I want to add a global right bar button in the global AppDelegate so all my view controllers will have this button automatically.
I added in the AppDelegate
navigator.window.rootViewController.navigationController.navigationItem.rightBarButtonItem     
= [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease]; 

Of course the above code is not working..any problem with the code above?

A:

Well, I'm not sure you can do it in your way, because UINavigatorController always uses the buttons from the view controller that is currently displayed, and not from the top / root controller.
What you can do is to subclass TTViewController with a new view controller and set your left bar button item. 
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
@implementation BaseViewController

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
#pragma mark -
#pragma mark UIViewController

///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)viewDidLoad {
  [super viewDidLoad];

  self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Test", @"") 
                                                                            style:UIBarButtonItemStyleBordered target:self action:@selector(showTest)] autorelease];
}

and then you should extend all your view controllers from this base controller, which contains the right navigation bar item

A:

What you need to do is to tap into the navigation controller you wish to hook into. then you can implement UINavigationControllerDelegate  (each navigation controller has a delegate property) which will give you these events:
// Called when the navigation controller shows a new top view controller via a push, pop or setting of the view controller stack.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

You can implement
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 
and put your right button in place.

