Няма извикване на shouldAutorotateToInterfaceOrientation при използване на персонализиран TabBarController

Създадох персонализиран TabBarController, който наследява от UIViewController (НЕ UITabBarController, защото не е предназначен за подкласове). Всичко работи добре, с изключение на поддръжката за ориентация.

Моят TabBarController е зададен като rootViewController на моя UIWindow и съдържа вътрешен масив от UIViewControllers. В моя случай добавих UINavigationControllers като корен на всеки раздел.

Когато натискам нов UIViewController към който и да е от моите UINavigationControllers в моя TabBarController, получавам извикване към shouldAutorotateToInterfaceOrientation, всичко това е добре, защото тук мога да задам кой UIViewController да поддържа коя ориентация (както е описано в документацията на Apple).

Въпреки това, когато се върна, като натисна бутона за връщане назад в моя UINavigationBar, не получавам извикване към shouldAutorotateToInterfaceOrientation, следователно изгледът, който показваме, ще се окаже в грешна ориентация.

Направих бърз тест, като замених своя персонализиран TabBarController с UITabBarController и получавам извикването на shouldAutorotateToInterfaceOrientation при натискане на бутона за връщане назад, така че трябва да има нещо нередно тук, но не мога да разбера какво.

Защо не получавам обажданията към shouldAutorotateToInterfaceOrientation? UITabBarController прави ли нещо, което съм пропуснал?

Някой тук имал ли е същия проблем? Имате ли някакви идеи, които може да си струва да опитате, защото идеите ми се изчерпаха.

РЕДАКТИРАНЕ

Този проблем се разрешава чрез добавяне на всеки UIViewController в рамките на TabBarController като дете с помощта на контролера за изглед на контейнер iOS5.

Добавете UIViewController като дете с този метод: addChildViewController След това заменете automaticForwardAppearanceAndRotationMethodsToChildViewControllers и върнете YES.

Сега трябва да получите обратните извиквания на shouldAutorotateToInterfaceOrientation във вашите UIViewControllers


person Markus Persson    schedule 18.01.2012    source източник


Отговори (1)


Виждал съм такива проблеми и преди и винаги се свеждаше до добавяне на метода -shouldAutorotateToInterfaceOrientation: към всички контролери за изглед, а не само към най-горния, както бихте очаквали.

(и ако сте мързеливи, просто добавете категория към UIViewController)

person mvds    schedule 18.01.2012
comment
Добавих този метод към всички контролери за изгледи, но все още не получавам обаждането. Въпреки това току-що прочетох за новите контролери за изглед на контейнер в iOS5. Като добавя моите контролери за изглед в контролера на лентата с раздели като дъщерен с addChildViewController и заменя автоматичноForwardAppearanceAndRotationMethodsToChildViewControllers, връщайки ДА, ще получа обратното извикване на shouldAutorotateToInterfaceOrientation! - person Markus Persson; 18.01.2012
comment
готино. не забравяйте, че контролерите за изглед, които използвате без подкласове, също са контролери за изглед. - person mvds; 18.01.2012