0

我正在应用程序委托中创建一个 NavigationController 并使用以下代码以编程方式向它添加一个自定义按钮。

self.navCntrl = [[UINavigationController alloc]initWithRootViewController:self.viewController];
// -- Adding INFO button to Navigation bar --
UIBarButtonItem *infoButton =  [[UIBarButtonItem alloc]
                                initWithTitle:@"i"
                                style:UIBarButtonItemStyleBordered
                                target:self
                                action:@selector(showInfo)];
self.navCntrl.topViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:infoButton, nil];
self.window.rootViewController = self.navCntrl;

但问题是,当我将第二页推送到 navigationController 时,导航栏上未显示取消按钮。如果我回到第一页,取消按钮就在那里。因此,显然该按钮仅针对第一个视图添加。

对此的一种补救方法是在每个视图控制器中重复添加上述自定义按钮(复制和粘贴代码)。我相信在使用相同的导航控制器时必须有其他方式。如果有的话是什么?

提前致谢

4

1 回答 1

1

导航控制器导航栏中显示的按钮不属于导航控制器,它们是每个单独的视图控制器导航的属性。通常,这些按钮执行的操作适用于当前显示的视图控制器,而不是整个导航控制器。

如果您确实需要导航层次结构中的所有视图控制器都具有相同的按钮,而无需在任何地方复制和粘贴代码,您可以将自己设置为导航控制器delegatenavigationController:willShowViewController:animated:像这样实现:

- (void)navigationController:(UINavigationController *)navigationController  willShowViewController:(UIViewController *)viewController  animated:(BOOL)animated
{
    //Assuming you have initialized self.infoButtonItem elsewhere...:
    viewController.navigationItem.rightBarButtonItem = self.infoButtonItem;
}
于 2013-03-28T18:36:15.980 回答