Как в контроллере панели вкладок перейти от одного контроллера представления к другому и сохранить панель вкладок?

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

я использовал

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"newView"]){
        UIViewController *controller =segue.destinationViewController;
        controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
        [self presentModalViewController:controller animated:YES];
    }
 }

Это отлично работает, за исключением того, что панель вкладок отсутствует в разделе для просмотра (заполнитель отображается для нее в раскадровке, но не отображается при запуске приложения). Я также пытался заменить

[self presentModalViewController:controller animated:YES];

с участием

[self presentViewController:controller animated:YES completion:nil];

но это тоже не работает.

Небольшая отладка показывает, что для контроллера представления segued-to свойство tabBarController имеет значение nil.

Можно ли каким-либо образом сохранить панель вкладок в контроллере представления segued-to?


person John    schedule 14.03.2012    source источник


Ответы (1)


Из вашего объяснения я не думаю, что вам нужен модальный контроллер. Модальный режим используется для наложения, что делает вашу панель вкладок бесполезной. В раскадровке выберите свой переход и выберите push, а не модальный.

введите здесь описание изображения

Push vs Modal (обратите внимание на панель вкладок):

введите здесь описание изображениявведите здесь описание изображения

person Gobot    schedule 14.03.2012
comment
Я использую Push not Modal. Панель вкладок отображается в раскадровке, но фактически не появляется при запуске приложения. - person John; 14.03.2012
comment
Чтобы инициировать переход из кода, используйте [self performSegueWithIdentifier:@"theSegueIdentifier" sender:selfOrSomeObject], который является методом UIViewController. Эта строка controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:controller animated:YES]; используется для модальных переходов, а не для push-уведомлений. Удалите эту строку. - person Gobot; 14.03.2012
comment
Также из документов Apple для presentModalViewController:animated... На устройствах iPhone и iPod touch представление modalViewController всегда отображается в полноэкранном режиме. На iPad представление зависит от значения свойства modalPresentationStyle. - person Gobot; 14.03.2012
comment
Я начал с кода, как вы предлагаете, и не мог заставить работать переход, пока не вставил дополнительные строки. Теперь я понял, что переходы push работают только внутри навигационного контроллера (и могу заставить его работать). Я думал, что с контроллером навигации будут проблемы, но я обнаружил флажок видимости панели и закрыл представление с помощью [self.navigationController popViewControllerAnimated:NO];. Спасибо за вашу помощь, особенно цитату из документа, которую я читал, но забыл. - person John; 15.03.2012