如何在Three20的AppDelegate中添加一个全局右键button(UINavigationController)

我想在全局AppDelegate中添加一个全局右键button,所以我所有的视图控制器都会自动拥有这个button。

我在AppDelegate中添加了

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

当然,上面的代码不工作..以上代码的任何问题?

那么,我不确定你可以这样做,因为UINavigatorController总是使用当前显示的视图控制器中的button,而不是从顶部/根控制器。

你可以做的是用一个新的视图控制器子类化TTViewController ,并设置你的左栏button项目。

 /////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////// @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]; } 

然后你应该扩展你的所有视图控制器从这个基础控制器,其中包含正确的导航栏项目

你需要做的是进入你想要挂钩的导航控制器。 那么你可以实现UINavigationControllerDelegate(每个导航控制器都有一个委托属性),它会给你这些事件:

 // 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; 

你可以实现

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

并把你的右键到位。