2012-06-11 4 views
2

вот часть моего кода, но таким образом, когда я нажимаю контроллер уровня третьего уровня, табба не будет отображаться.UINavigationController, как скрыть вкладку во втором уровне viewController, а затем отобразить вкладку на третьем уровне viewController

//at first level 
SecondLevelViewController *_2vc = [[SecondLevelViewController alloc]initWithNibName:@"SecondLevelViewController" bundle:nil]; 
    _2vc.hidesBottomBarWhenPushed = YES; 
    [self.navigationController pushViewController:_2vc animated:YES]; 

//at second level 
ThirdLevelViewController *_3vc = [[ThirdLevelViewController alloc]initWithNibName:@"ThirdLevelViewController" bundle:nil]; 
    _3vc.hidesBottomBarWhenPushed = NO; 
    [self.navigationController pushViewController:_3vc animated:YES]; 

ответ

1

Вместо того, чтобы устанавливать значения hidesBottomBarWhenPushed при инициализации контроллеров отображений, вместо него вы должны обработать механизм сокрытия в - (пустоте) viewWillAppear: (BOOL) анимированный в контроллерах просмотреть вместо этого.

Примером такой реализации будет:

В SecondLevelViewController.m

-(void)viewWillAppear:(BOOL)animated 
{ 
    [_bottomBar setHidden:YES]; 
} 

В ThirdLevelViewController.m

-(void)viewWillAppear:(BOOL)animated 
{ 
    [_bottomBar setHidden:NO]; 
} 
+0

Он работает. Но мне интересно, почему установка hidesBottomBarWhenPushed свойства на NO не будет работать при нажатии на контроллер уровня третьего уровня? –

+0

Я предполагаю, что hidesBottomBarWhenPushed - это переменная BOOL no? Если это просто переменная bool, вы не можете ожидать, что она будет скрывать/отображать виды сама по себе. Вам нужно будет реализовать код скрытия/отображения где-нибудь в вашем контроллере представления. В этом примере я установил код hide/display в методе viewWillAppear. –

3
// Load the view 
    AddViewController *aController = [[AddViewController alloc] init]; 

    // Set the view title 
    aController.title = @"Add View"; 

    // hide tabbar 
    aController.hidesBottomBarWhenPushed = YES; 

    // add it to stack. 
    [[self navigationController] pushViewController:aController animated:YES]; 

-(void)viewWillAppear: (BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.tabBarController.tabBar setHidden:YES]; 
} 

-(void)viewWillDisappear: (BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.tabBarController.tabBar setHidden:NO]; 
} 
+0

Я предполагаю, что первый бит кода должен быть инкапсулирован в метод 'viewDidLoad'? Кроме того, можете ли вы добавить немного объяснений относительно того, что здесь происходит? –

Смежные вопросы