2017-02-18 56 views
0

我想隱藏底部的標籤欄時,推動新的視圖控制器UINavigationController(我使用默認標籤欄)。我通過繼承UINavigationController來創建我的自定義導航控制器。如何隱藏我的自定義導航控制器中的標籤欄?

我重寫如下兩個功能:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    self.tabBarController.tabBar.hidden = YES; 
    [super pushViewController:viewController animated:YES]; 
} 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated { 
    NSLog(@"NavigationController: View controller count = %lu", self.viewControllers.count); 
    if (self.viewControllers.count <= 2) { 
     self.tabBarController.tabBar.hidden = NO; 
    } 
    return [super popViewControllerAnimated:animated]; 
} 

在應用程序委託:

// Use my custom navigation controller 
NavigationController *myNav1 = [[NavigationController alloc] initWithRootViewController:myView]; 
myNav1.navigationBar.translucent = NO; 
myNav1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"abc" image:[UIImage imageNamed:@"abc"] selectedImage:[UIImage imageNamed:@"abc"]]; 

... 

self.tabController.viewControllers = [NSArray arrayWithObjects:myNav1, myNav2, myNav3, myNav4, nil]; 

問題:

  1. 當按下新的視圖控制器,底欄會立即隱藏,我希望它看起來像被視圖控制器推動。
  2. 當我嘗試返回到先前的視圖控制器使用手勢時,底部欄會顯示,即使我停止返回,它也不會隱藏。

我知道一個標誌hidesBottomBarWhenPushed。如果我使用該標誌,則需要每次需要推送視圖控制器時將其設置爲YES。這有點複雜。

有沒有辦法在我的自定義導航控制器中解決這些問題?

+0

ü[R使用默認的TabBar或定製的TabBar? –

+0

@ ravi.p我使用默認的tabbar。 –

+0

在應用程序委託中取一個UINavigationController對象,並在didFinishLaunchingWithOptions中爲其分配self.appNavController =(UINavigationController *)self.window.rootViewController;所以當你想推動沒有tabbar使用它與應用程序代理 –

回答

0

似乎解決我的問題(代碼不是很好,以後會做一些更新):

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { 
    NSLog(@"NavigationController.pushViewController: view controller count %lu", self.viewControllers.count); 

    UIViewController *lastVC = nil; 
    if (self.viewControllers.count > 0) { 
     lastVC = self.viewControllers[self.viewControllers.count - 1]; 
    } 
    if (lastVC != nil) { 
     lastVC.hidesBottomBarWhenPushed = YES; 
    } 
    [super pushViewController:viewController animated:YES]; 
    if (self.viewControllers.count == 2) { 
     lastVC.hidesBottomBarWhenPushed = NO; 
    } 
} 
相關問題