如果我只想隐藏一种控制器的tabbar,如何使用hidesBottomBarWhenPushed?

时间:2011-06-07 13:37:04

标签: ios uitabbar

我在使用hidesBottomBarWhenPushed时遇到了麻烦...... 我将把三个控制器--A,B和C - 按顺序推入导航控制器,我想在显示B时隐藏底部标签栏。(和A是一个标签控制器)

有人有想法吗?

3 个答案:

答案 0 :(得分:9)

在视图控制器A(位于tabBar上),当到达B时(无需tabBar):

self.hidesBottomBarWhenPushed = YES; // hide the tabBar when pushing B
[self.navigationController pushViewController:viewController_B animated:YES];
self.hidesBottomBarWhenPushed = NO; // for when coming Back to A

在视图控制器B中,当需要呈现C(tabBar再次想要)时:

self.hidesBottomBarWhenPushed = NO; // show the tabbar when pushing C
[self.navigationController pushViewController:viewController_C animated:YES];
self.hidesBottomBarWhenPushed = YES; // for when coming Back to B

答案 1 :(得分:7)

我发现有时这太晚了,而不是在viewDidLoad中设置它。在init中设置它或覆盖hidesBottomBarWhenPushed为没有底部工具栏的视图返回YES。

答案 2 :(得分:2)

来自hidesBottomBarWhenPushed文档:

  

如果是,则底部栏保持隐藏状态,直到视图控制器为止   从堆栈中弹出。

这意味着如果您不必知道视图控制器的推送顺序,那么除了topViewController之外,您需要堆栈中的所有视图控制器将其hidesBottomBarWhenPush设置为false。 / p>

所以我做的是

  1. 在推送新的View Controller之前,我根据需要设置了hidesBottomBarWhenPushed属性
  2. 也在推送我设置self.hidesBottomBarWhenPushed之前确保整个堆栈直到下一个堆栈的属性设置为false
  3. 在弹出之前
  4. ,当我检查是否应该显示tabBar时,并且更新其hidesBottomBarWhenPushed
  5. 这里有一些代码1和2)

      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        self.hidesBottomBarWhenPushed = false
    
        if (segue.identifier == "MyViewControllerWhoHidesTabBar") {
          let viewController: MyViewControllerWhoShowsTabBar = segue.destinationViewController as! MyViewControllerWhoShowsTabBar
          viewController.hidesBottomBarWhenPushed = true
        }
           // rest of implementation....
     }
    

    3)我已将后退按钮操作覆盖为

      func backButtonClick(sender:UIButton!) {
        let viewControllers = self.navigationController!.viewControllers
        if let vc = viewControllers[viewControllers.count-2] as? MyViewController {
          if vc.isKindOfPageYouDontWannaShowTheTabBar() == true {
            vc.hidesBottomBarWhenPushed = true
          }
        }
        navigationController?.popViewControllerAnimated(true)
      }