Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何更改UINavigationController';全球范围内的右翼巴布托主义?_Ios_Objective C - Fatal编程技术网

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