如何根据 UINavigationController 中显示的 UIViewController 更改 UINavigationBar
How to change UINavigationBar depending on the UIViewController shown in UINavigationController
正如问题所说,当UINavigationController 显示不同的UIViewController 时,我需要能够更改UINavigationBar 的内容。这对于标题来说很容易实现,因为导航控制器只使用视图控制器的标题 属性。我正在努力解决的问题是根据视图控制器更改左右栏按钮项。
我用来更改它们的代码已经在其他多个问题中得到解决,这并不是真正的问题,尽管我将使用以下内容作为参考:
UIBarButtonItem *newItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemAdd target:self action:nil];
newItem.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem = newItem;
我认为我正在寻找的是每次导航控制器显示新的 UIViewController 时调用的方法,以便设置导航控制器布局。在 UINavigationController 的文档中有以下方法:
// 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;
但是,当我 运行 应用程序时,似乎在任何时候都不会调用此方法。那么,当导航控制器显示一个新的视图控制器时,是否有一种方法被调用?还是我在这里完全错了,并且已经有一种公认的方法可以让导航栏随着显示在其下方的视图而改变,这是我到目前为止错过的?
典型的解决方案是将代码放入每个视图控制器的 viewDidLoad
方法中以设置所需的按钮。
您问题中的第一段代码将是视图控制器设置所需按钮的完美示例,该按钮在显示导航栏(视图控制器)时显示在导航栏的右侧。
您无需对导航控制器委托或导航控制器本身执行任何操作。
正如问题所说,当UINavigationController 显示不同的UIViewController 时,我需要能够更改UINavigationBar 的内容。这对于标题来说很容易实现,因为导航控制器只使用视图控制器的标题 属性。我正在努力解决的问题是根据视图控制器更改左右栏按钮项。
我用来更改它们的代码已经在其他多个问题中得到解决,这并不是真正的问题,尽管我将使用以下内容作为参考:
UIBarButtonItem *newItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:
UIBarButtonSystemItemAdd target:self action:nil];
newItem.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem = newItem;
我认为我正在寻找的是每次导航控制器显示新的 UIViewController 时调用的方法,以便设置导航控制器布局。在 UINavigationController 的文档中有以下方法:
// 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;
但是,当我 运行 应用程序时,似乎在任何时候都不会调用此方法。那么,当导航控制器显示一个新的视图控制器时,是否有一种方法被调用?还是我在这里完全错了,并且已经有一种公认的方法可以让导航栏随着显示在其下方的视图而改变,这是我到目前为止错过的?
典型的解决方案是将代码放入每个视图控制器的 viewDidLoad
方法中以设置所需的按钮。
您问题中的第一段代码将是视图控制器设置所需按钮的完美示例,该按钮在显示导航栏(视图控制器)时显示在导航栏的右侧。
您无需对导航控制器委托或导航控制器本身执行任何操作。