Създадох персонализиран 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