показать / скрыть панель вкладок при необходимости от контроллера представления - PullRequest
5 голосов
/ 06 февраля 2012

Я новичок в программировании на iOS.Мне действительно нужна ваша помощь.

У меня есть экран входа, который выводит меня на карту (Google API).при нажатии на любую созданную аннотацию я хочу загрузить панель вкладок с двумя представлениями.

Я искал и обнаружил, что мне нужно добавить панель вкладок в начале, т.е. приложение applegate и показать / скрыть панель вкладок при необходимости.

, поэтому я сделал 2 функции для отображения и скрытия табуляции как

-(void)Load_tabBar{
[self.navigationController.view removeFromSuperview];
[self.window addSubview:tabBarController.view];
[self.window makeKeyWindow];}

-(void)remove_tabBar{
self.tabBarController.selectedIndex=0;
[self.tabBarController.view removeFromSuperview];
[self.window addSubview:navigationController.view];
[self.window makeKeyWindow];}

, это сработало, когда я вызываю метод Load_tabBar и когда я нажимаю назад, он вызывает метод remove_tabBar.если я снова вызываю метод Load_tabBar и возвращаюсь, происходит сбой, выдавая ошибку

- [окно UILayoutContainerView]: сообщение отправлено на освобожденный экземпляр 0x563b0b0

отредактировано: PS: могу ли я добавить представление панели вкладок в контроллер представленияа затем выдвинуть это представление?

thnx

Ответы [ 3 ]

10 голосов
/ 06 февраля 2012

используйте это self.hidesBottomBarWhenPushed = YES;

1 голос
/ 13 ноября 2012

Этот метод определенно работает.Вам просто нужно поместить его в метод ДО ТОГО, как вы его нажмете, например:

-actionThatPushTheViewController { 

    //create the view controller here, do some init. 

    //then:
    theViewControllerToBePushed.hidesBottomBarWhenPushed = YES;

    //push it here like this: 
    [self.navigationController pushViewController:theViewControllerToBePushed animated:YES];
1 голос
/ 06 февраля 2012

Я надеюсь, что эти два метода могут вам помочь,

- (void) hideTabBar:(UITabBarController *) tabbarcontroller {

int height = 480;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

for(UIView *view in tabbarcontroller.view.subviews) {
    if([view isKindOfClass:[UITabBar class]]) {
        [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];
    } 
    else {
        [view setFrame:CGRectMake(view.frame.origin.x,view.frame.origin.y, 320, 436)];
    }
}
[UIView commitAnimations];

}

- (void) showTabBar:(UITabBarController *) tabbarcontroller {

int height = 480;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3]; 

for(UIView *view in tabbarcontroller.view.subviews) {

    if([view isKindOfClass:[UITabBar class]]) {
        [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];            
    } 
    else {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, height)];
    }
}    

[UIView commitAnimations];

}

Просто поместите эти два метода в класс AppDelegate и при необходимости вызывайте его в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...