Ios 如何更改UINavigationController';全球范围内的右翼巴布托主义?
我正在尝试全局更改导航栏的正确项。所以我创建了这样的父类:Ios 如何更改UINavigationController';全球范围内的右翼巴布托主义?,ios,objective-c,Ios,Objective C,我正在尝试全局更改导航栏的正确项。所以我创建了这样的父类: @implementation ParentViewController ... - (void)loadView { [super loadView]; UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"send"]]; self.navigationController.navigationIt
@implementation ParentViewController
...
- (void)loadView {
[super loadView];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"send"]];
self.navigationController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:sendImageView];
}
...
@end
我有两个名为A
和B
的ViewController
类,它们继承自ParentViewController
。他们两个都有
- (void)loadView {
[super loadView];
}
A的第一个实例出现并执行
B *vc = [[B alloc] init];
[self.navigationController pushViewController:vc animated:YES];
问题是,右栏按钮项只出现在A上,而不出现在B上。我认为父类的loadView
调用会起作用,但事实并非如此。如何全局更改该按钮
我没有使用xib。因此,始终会调用loadView。
如果视图控制器具有用于加载视图的关联XIB,则不会调用loadView
您可能想考虑< <代码>委托> <代码> >代码> UINavigationController <代码>来处理这些东西并实现<代码>导航控制器:WeleSeaveValueCudio:动画:。然后,您可以直接询问新的
viewController
,以决定是否应该执行任何操作,如果需要,您可以更改其navigationItem
,我想我已经找到了解决方法。它将右侧项目更改为普通图像,将左侧项目设置为标题为“后退”的后退按钮
所以,如果子类不需要back按钮,它可以
self.navigationItem.leftBarButtonim=nil代码>我最近写了一篇关于这个问题的博文:
基本思想是将UINavigationController子类化,为其提供一个BarButtonim属性(下面代码中的self.myButton),并添加类似以下内容的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (!viewController.navigationItem.rightBarButtonItem) {
viewController.navigationItem.rightBarButtonItem = self.myButton;
}
}
对于那些感兴趣的人,这篇博文详细介绍了如何在InterfaceBuilder中进一步设置这一点,这需要一些技巧(在这个答案中涉及太多)
- (void)viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (!viewController.navigationItem.rightBarButtonItem) {
viewController.navigationItem.rightBarButtonItem = self.myButton;
}
}