Я создал собственный TabBarController, который наследуется от UIViewController (НЕ UITabBarController, потому что он не предназначен для создания подклассов). Все работает нормально, кроме поддержки ориентации.
Мой TabBarController установлен как rootViewController в моем UIWindow и содержит внутренний массив UIViewControllers. В моем случае я добавил UINavigationControllers как корень каждой вкладки.
При нажатии нового UIViewController на любой из моих UINavigationController в моем TabBarController я получаю вызов shouldAutorotateToInterfaceOrientation, это нормально, потому что здесь я могу установить, какой UIViewController должен поддерживать какую ориентацию (как описано в документации Apple).
Однако, когда я возвращаюсь, нажав кнопку «Назад» в UINavigationBar, я не получаю вызова shouldAutorotateToInterfaceOrientation, поэтому отображаемое представление окажется в неправильной ориентации.
Я провел быстрый тест, заменив свой собственный TabBarController на UITabBarController, и я получаю вызов shouldAutorotateToInterfaceOrientation при нажатии кнопки возврата, поэтому здесь должно быть что-то не так, но я не могу понять, что.
Почему я не получаю вызовы shouldAutorotateToInterfaceOrientation? UITabBarController делает что-то, что я пропустил?
Кто-нибудь здесь испытывал такую же проблему? Есть ли у вас идеи, которые стоит попробовать, потому что у меня они закончились.
ИЗМЕНИТЬ
Эта проблема решается путем добавления каждого UIViewController в TabBarController в качестве дочернего с помощью контроллера представления контейнера iOS5.
Добавьте UIViewController в качестве дочернего элемента с помощью этого метода: addChildViewController Затем автоматически переопределите ForwardAppearanceAndRotationMethodsToChildViewControllers и верните YES.
Теперь вы должны получить обратные вызовы shouldAutorotateToInterfaceOrientation в ваших UIViewControllers.