Iphone 使用自定义TabBarController时不调用shouldAutorotateToInterfaceOrientation

Iphone 使用自定义TabBarController时不调用shouldAutorotateToInterfaceOrientation,iphone,objective-c,uitabbarcontroller,uiinterfaceorientation,Iphone,Objective C,Uitabbarcontroller,Uiinterfaceorientation,我创建了一个从UIViewController继承的自定义TabBarController(不是UIAbbarController,因为它不用于子类化)。除了方向支持外,其他一切都正常 My TabBarController在My UIWindow上设置为rootViewController,并包含UIViewController的内部数组。在我的例子中,我添加了UINavigationControllers作为每个选项卡的根 当将新UIViewController推送到TabBarContro

我创建了一个从UIViewController继承的自定义TabBarController(不是UIAbbarController,因为它不用于子类化)。除了方向支持外,其他一切都正常

My TabBarController在My UIWindow上设置为rootViewController,并包含UIViewController的内部数组。在我的例子中,我添加了UINavigationControllers作为每个选项卡的根

当将新UIViewController推送到TabBarController中的任何UINavigationController时,我会接到一个呼叫shouldAutorotateToInterfaceOrientation,这一切都很好,因为在这里我可以设置哪个UIViewController应该支持哪个方向(如Apple文档中所述)

但是,当我通过按UINavigationBar中的“后退”按钮返回时,我没有接到shouldAutorotateToInterfaceOrientation的调用,因此我们显示的视图将以错误的方向结束

我做了一个快速测试,用UITabBarController替换了我的自定义TabBarController,当按下后退按钮时,我接到了shouldAutorotateToInterfaceOrientation的呼叫,因此这里一定有问题,但我无法找出原因

为什么我没有接到shouldAutorotateToInterfaceOrientation的电话?UtiAbbarController正在做我错过的事情吗

这里有人经历过同样的问题吗?你有什么想法值得一试吗?因为我的想法已经没有了

编辑

通过使用iOS5容器视图控制器将TabBarController中的每个UIViewController作为子级添加,可以解决此问题

使用以下方法将UIViewController添加为子级:addChildViewController然后自动覆盖ForwardAppearanceAndRotationMethodToChildViewController并返回YES


现在,您应该在UIViewControllers中获得shouldAutorotateToInterfaceOrientation回调

我以前见过这样的问题,它总是归结为将
-shouldAutorotateToInterfaceOrientation:
方法添加到所有视图控制器中,而不是像您预期的那样仅添加到最上面的一个


(如果您很懒,只需将一个类别添加到
UIViewController

我已将此方法添加到所有视图控制器中,但仍然没有收到调用。不过,我刚刚了解了iOS5中新的容器视图控制器。通过使用addChildViewController在选项卡栏控制器中将我的视图控制器添加为子视图,并自动覆盖ForwardAppearanceandRotationMethodToChildViewController返回YES,我将获得shouldAutorotateToInterfaceOrientation回调!酷。请记住,在没有子类化的情况下使用的视图控制器也是视图控制器。