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

时间:2012-01-18 14:37:10

标签: iphone objective-c uitabbarcontroller uiinterfaceorientation

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

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

当我将新的UIViewController推送到我的TabBarController中的任何UINavigationControllers时,我得到了对shouldAutorotateToInterfaceOrientation的调用,这很好,因为在这里我可以设置哪个UIViewController应该支持哪个方向(如Apple文档中所述)。

然而,当我按下UINavigationBar中的后退按钮返回时,我没有调用shouldAutorotateToInterfaceOrientation,因此我们显示的视图将以错误的方向结束。

我通过用UITabBarController替换我的自定义TabBarController进行了快速测试,当按下后退按钮时我接到了对shouldAutorotateToInterfaceOrientation的调用,所以这里肯定有问题,但我无法弄清楚是什么。

为什么我不接到对shouldAutorotateToInterfaceOrientation的调用? UITabBarController是否正在做我错过的事情?

这里有人遇到过同样的问题吗?你有任何可能值得尝试的想法,因为我已经没有想法了。

修改

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

使用此方法将UIViewController添加为子项:addChildViewController然后覆盖automaticForwardAppearanceAndRotationMethodsToChildViewControllers并返回YES。

现在你应该在你的UIViewControllers中获得shouldAutorotateToInterfaceOrientation回调

1 个答案:

答案 0 :(得分:2)

我以前见过这样的问题,并且始终归结为将-shouldAutorotateToInterfaceOrientation:方法添加到所有视图控制器,而不仅仅是最重要的一个可能会期待。

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