条形图按钮项仅在一个标签栏控制器导航栏中

rat*_*hah 11 uitabbarcontroller uibarbuttonitem ios

我有一个带有4个视图控制器的标签栏控制器,并在导航控制器中有这个标签栏控制器.

我想为标签栏控制器的一个特定视图控制器显示一个UIBarButtonItem.

我试着使用以下内容

if (tabBarController.selectedViewController == customTourViewController)
    {
        [tabBarController.navigationItem setRightBarButtonItem:done];
    }
Run Code Online (Sandbox Code Playgroud)

但按钮没有显示出来.

如果我将每个视图控制器放在导航控制器中,则该按钮仅显示该视图,但最终我有2个导航栏.

有什么方法可以实现第一个解决方案吗?谢谢.

Rob*_*Rob 26

在各个选项卡的各个视图控制器中,我在需要按钮的控制器中有以下内容:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                    style:UIBarButtonSystemItemDone target:nil action:nil];
    self.tabBarController.navigationItem.rightBarButtonItem = rightButton;
}
Run Code Online (Sandbox Code Playgroud)

在不需要按钮的视图控制器中,我有:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.tabBarController.navigationItem.rightBarButtonItem = nil;
}
Run Code Online (Sandbox Code Playgroud)

所以,如果它不适合你,我不确定它是否是你tabBarController没有self指定的引用(如果我省略了self我得到编译器错误).这段代码在哪里,因为如果它在你的tabBarController子类中,那么你想要self.navigationItem.rightBarButtonItem,对吧?您是否为该变量名定义了自己的ivar?或者你确定它done被正确定义(即没有nil)?或者您确定要调用此代码(可能设置断点或插入NSLog并确保已达到此代码)?


Joh*_*y Z 5

或者,您可以在需要按钮的同一视图中实现viewWillDisappear。

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];        
    self.tabBarController.navigationItem.rightBarButtonItem = nil;
}
Run Code Online (Sandbox Code Playgroud)