簡體   English   中英

從TabBarController的導航控制器中隱藏BarButton項

[英]Hide BarButton item from Navigation Controller of TabBarController

我有一個tabBarController,其中包含三個選項卡。 我只想在第一個ViewController中向導航欄顯示rightBarButtonItem,但是當我回來時,我希望它再次可見。 如何實現呢?

我試圖為BarButtonItem設置enabled = NO,但是效果不好。

當視圖改變時,我也嘗試將BarButtonItem設置為nil,但是當我回來時,消失了。

我將BarButtonItem從viewDidLoad移到了viewWillAppear,但是它不能正常工作。

這是將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];

您是否以編程方式使用情節提要或全部? 嘗試這個:

1-打開新項目(單個視圖)

2-進入情節提要->添加導航控制器 在此處輸入圖片說明

3-刪除表視圖控制器 在此處輸入圖片說明

4-將導航控制器設置為啟動控制器(拖動將視圖控制器指向導航控制器的箭頭) 在此處輸入圖片說明

5-將視圖控制器設置為導航控制器的根視圖控制器 在此處輸入圖片說明在此處輸入圖片說明在此處輸入圖片說明

6-完成您的代碼和@Apurv的解決方案

替換下面的行:

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

用這行:

[self.navigationItem setRightBarButtonItem:self.refreshBtn];

當您只想將其顯示為viewController時,請勿將其添加到tabBarController中。

如果將來有人提出這個建議,那么對我有用:

在第一個視圖控制器中,我將此添加到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];



}

在viewWillAppear方法的第二個View Controller中,這是:

    self.tabBarController.navigationItem.rightBarButtonItem=nil;

問題在於,每個進入TabBarController的viewController的viewDidLoad僅被調用一次,但是每次viewController出現時都會調用viewWillAppear。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM