панель вкладок скрыта после поворота

Я пока не нашел ничего подходящего для моей ситуации...

К вашему сведению, я разрабатываю для iOS 5, используя раскадровку.

У меня есть контроллер панели вкладок с 2 представлениями в нем (назовем их вкладка 1 и вкладка 2). У меня также есть отдельная альбомная ориентация, без панели вкладок, которая используется каждый раз, когда устройство поворачивается во время использования приложения. Я использую переход, запущенный вручную в shouldAutorotateToInterfaceOrientation, чтобы переключиться в это представление и из него. Я также использую NSString в альбомной ориентации, чтобы узнать, с какой вкладки я иду, чтобы вернуться к правильной, когда я вернусь к портретной ориентации. Пока это работает нормально. Я могу переходить в ландшафтный режим и выходить из него именно так, как хочу.

Моя проблема:

Когда я запускаю приложение в портретной ориентации, я вижу панель вкладок. Если я перехожу к пейзажу, он исчезает. Это нормально, это то, что я сделал в своей раскадровке. Но когда я возвращаюсь к портретной ориентации, панель вкладок не возвращается! Это проблема.

Изменить: код, вызывающий ротацию

Я перестал использовать shouldAutorotateToInterfaceOrientation для поворота, потому что это противоречило пользовательским переходам. Проблема с панелью вкладок была здесь раньше, так что это не проблема. Вместо этого я использую didRotate.

Вот код из FirstViewController.m (тот же код в SecondViewController.m, изменив мой идентификатор перехода):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if ((newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight)) 
    {
        [self performSegueWithIdentifier: @"Page1ToLandscapeSegue" sender: self];
    }
}

И из LandscapeViewController.m (previousView - это NSString, установленная перед переходом в ландшафт, поэтому я знаю, из какого представления я исхожу):

-(void)didRotate:(NSNotification *)notification
{ 
    UIInterfaceOrientation newOrientation =  [[UIDevice currentDevice] orientation];
    if (newOrientation == UIInterfaceOrientationPortrait)
    {
        if ([previousView isEqualToString: @"View1"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage1Segue" 
                                      sender: self];
        }

        else if ([previousView isEqualToString: @"View2"]) {
            [self performSegueWithIdentifier: @"LandscapeToPage2Segue" 
                                      sender: self];
        }
    }
}

person rdurand    schedule 30.08.2012    source источник
comment
Пожалуйста, опубликуйте свой код для shouldAutorotateToInterfaceOrientation, чтобы мы могли вам помочь.   -  person lnafziger    schedule 03.09.2012
comment
Обновил мой пост с вращающимся кодом. Я не использую shouldAutorotateToInterfaceOrientation для фактического запуска перехода (раньше я это делал, но перестал; проблема была здесь раньше). Я использую didRotate (см. редактирование моего поста).   -  person rdurand    schedule 03.09.2012
comment
Итак, у вас есть переходы для перехода к альбомной ориентации и 2 перехода к предыдущему виду, что-то вроде цикла?   -  person 8vius    schedule 03.09.2012
comment
И это переходы Push или Modal?   -  person 8vius    schedule 03.09.2012
comment
Всего 4 перехода: один из view1 в пейзаж, один в другую сторону, один из view2 в ландшафт, один в другую сторону. Сегменты выполняются правильно.   -  person rdurand    schedule 03.09.2012
comment
Все модальные переходы, перекрестное растворение.   -  person rdurand    schedule 03.09.2012
comment
Итак, переход LandscapeToPage1Segue отображает представление 1 или панель вкладок? Он должен отображать панель вкладок, если это то, что вы хотите видеть (и он содержит представления).   -  person lnafziger    schedule 03.09.2012
comment
Спасибо за внимание @Inafziger, но 8vius решил мою проблему.   -  person rdurand    schedule 03.09.2012


Ответы (1)


Глядя на ваши комментарии, я думаю, что ваша панель вкладок исчезает, потому что вы переходите от контроллера представления, который не встроен в контроллер панели вкладок (это ваш контроллер представления ландшафтного вида), я бы предложил следующее:

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

2) Сделайте переходы к альбомной ориентации модальными, чтобы панель вкладок не отображалась при переходе к ним, если вы используете push, она будет встроена в контроллер панели вкладок.

3) Поскольку ландшафтный вид будет модальным, просто вызовите этот метод в коде поворота в контроллере ландшафтного вида:

[[self presentingViewController] dismissModalViewControllerAnimated:YES];

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

person 8vius    schedule 03.09.2012
comment
Замечательно. Я пока не могу присудить награду, но поскольку это решит мою проблему, вы будете вознаграждены как можно скорее. Спасибо большое за вашу помощь ! - person rdurand; 03.09.2012