2017-02-18 2 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

У Р используя TabBar по умолчанию или пользовательский TabBar? –

+0

@ ravi.p Я использую панель по умолчанию. –

+0

возьмите один объект UINavigationController в делегате приложения и в файле didFinishLaunchingWithOptions назначьте его self.appNavController = (UINavigationController *) self.window.rootViewController; поэтому, когда вы хотите нажать без табуляции, используйте его с делегатом приложения –

ответ

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; 
    } 
} 
Смежные вопросы