简体   繁体   English

从TabBarController的导航控制器中隐藏BarButton项

[英]Hide BarButton item from Navigation Controller of TabBarController

I have a tabBarController that contains three tabs. 我有一个tabBarController,其中包含三个选项卡。 I want to show rightBarButtonItem to navigation bar only in 1st ViewController but when i am getting back i want it to be visible again. 我只想在第一个ViewController中向导航栏显示rightBarButtonItem,但是当我回来时,我希望它再次可见。 How to achieve this? 如何实现呢?

I tried to set enabled=NO for the BarButtonItem but the result wasn't good. 我试图为BarButtonItem设置enabled = NO,但是效果不好。

I also tried to set BarButtonItem to nil when the view changes but when i get back has disappeared. 当视图改变时,我也尝试将BarButtonItem设置为nil,但是当我回来时,消失了。

I moved BarButtonItem from viewDidLoad to viewWillAppear but it did't work properly. 我将BarButtonItem从viewDidLoad移到了viewWillAppear,但是它不能正常工作。

This is the code for rightBarButtonItem into viewDidLoad of first ViewController. 这是将rightBarButtonItem插入第一个ViewController的viewDidLoad中的代码。

UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];

UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];

[refreshButton setImage:refreshButtonImage
               forState:UIControlStateNormal];

[refreshButton setImage:refreshButtonImageB
               forState:UIControlStateHighlighted];

[refreshButton setImage:refreshButtonImageB
               forState:UIControlStateSelected];

refreshButton.frame = CGRectMake(0, 0, 30, 30);

[refreshButton addTarget:self
                  action:@selector(showImageInfo)
        forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc]  initWithCustomView:refreshButton];

self.refreshBtn=refreshBarButtonItem;

[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];

Do you use storyboard or all in programmatic way ? 您是否以编程方式使用情节提要或全部? Try this: 尝试这个:

1- open new project ( single view ) 1-打开新项目(单个视图)

2- go into storyboard -> add a navigation controller 2-进入情节提要->添加导航控制器 在此处输入图片说明

3- delete the table view controller 3-删除表视图控制器 在此处输入图片说明

4- set your navigation controller as the start controller ( drag the arrow which points your view controller to your navigation controller ) 4-将导航控制器设置为启动控制器(拖动将视图控制器指向导航控制器的箭头) 在此处输入图片说明

5- set your view controller as the root view controller of your navigation controller 5-将视图控制器设置为导航控制器的根视图控制器 在此处输入图片说明在此处输入图片说明在此处输入图片说明

6- complete with your codes and @Apurv's solution bellow 6-完成您的代码和@Apurv的解决方案

Replace your below line: 替换下面的行:

[self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];

With this line: 用这行:

[self.navigationItem setRightBarButtonItem:self.refreshBtn];

When you want to display it for viewController only, do not add it to tabBarController. 当您只想将其显示为viewController时,请勿将其添加到tabBarController中。

If anyone comes up with this in future this worked for me: 如果将来有人提出这个建议,那么对我有用:

In first view controller i added this to viewWillAppear 在第一个视图控制器中,我将此添加到viewWillAppear

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

    NSLog(@"!!!!");

    UIImage *refreshButtonImage = [UIImage imageNamed:@"9B_Info.png"];
    UIImage *refreshButtonImageB = [UIImage imageNamed:@"9A_Info.png"];

    UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];

    [refreshButton setImage:refreshButtonImage
                forState:UIControlStateNormal];

    [refreshButton setImage:refreshButtonImageB
                forState:UIControlStateHighlighted];

    [refreshButton setImage:refreshButtonImageB
                forState:UIControlStateSelected];

    refreshButton.frame = CGRectMake(0, 0, 30, 30);

    [refreshButton addTarget:self
                   action:@selector(showImageInfo)
         forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *refreshBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:refreshButton];

    self.refreshBtn=refreshBarButtonItem;

    [self.tabBarController.navigationItem setRightBarButtonItem:self.refreshBtn];



}

And in second View Controller in viewWillAppear method this: 在viewWillAppear方法的第二个View Controller中,这是:

    self.tabBarController.navigationItem.rightBarButtonItem=nil;

The problem is that viewDidLoad of each viewController into TabBarController is called only once but viewWillAppear every time that viewController comes up. 问题在于,每个进入TabBarController的viewController的viewDidLoad仅被调用一次,但是每次viewController出现时都会调用viewWillAppear。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM