Iphone 控制UIWindow发送的UIViewController应为AutoRotateTointerFaceOrientation:?

Iphone 控制UIWindow发送的UIViewController应为AutoRotateTointerFaceOrientation:?,iphone,ios,uiviewcontroller,orientation,uiwindow,Iphone,Ios,Uiviewcontroller,Orientation,Uiwindow,我有一个应用程序,它使用由多个UIVIewController对象管理的视图层次结构*请参阅下面的注释,在任何给定时间都可以在窗口中看到。因此,我发现它们中的哪一个从UIWindow接收设备旋转时的shouldAutorotateToInterfaceOrientation:方法调用基本上是任意的 如何确保UIWindow对象调用最高级别的UIViewController,而不是它的任何子对象 这似乎是旋转布局动画和更改正确传播的唯一方法 在《视图控制器编程指南》中,iOS文档说明: 在iOS应

我有一个应用程序,它使用由多个UIVIewController对象管理的视图层次结构*请参阅下面的注释,在任何给定时间都可以在窗口中看到。因此,我发现它们中的哪一个从UIWindow接收设备旋转时的shouldAutorotateToInterfaceOrientation:方法调用基本上是任意的

如何确保UIWindow对象调用最高级别的UIViewController,而不是它的任何子对象

这似乎是旋转布局动画和更改正确传播的唯一方法

在《视图控制器编程指南》中,iOS文档说明:

在iOS应用程序中,窗口对象执行与更改当前方向相关的大部分工作。但是,它与应用程序的视图控制器一起工作,以确定是否应该发生方向更改,如果是,应该调用哪些其他方法来响应更改。具体地说,它与视图控制器一起工作,该视图控制器的根视图最近添加到窗口中或显示在窗口中。换句话说,窗口对象仅适用于最前面的视图控制器,其视图是使用“显示视图控制器的视图”中描述的机制之一显示的

然而,我发现我的经历与此不同。当UIWindow在特定子视图控制器上调用shouldAutorotateToInterfaceOrientation时,即使我从UIWindow中删除并重新添加顶级视图控制器的视图,它仍会调用同一个子视图。换句话说,使我的顶级视图控制器成为最近添加的视图是行不通的

*注意:有些人指出,不建议在同一屏幕上使用多个视图控制器。我断言,在各种情况下,这是一个不可行的目标。考虑一个同时显示两个表UITable VIEW控制器的应用程序。或者,在我的例子中,由于UITabBar的图形/艺术限制,需要一个模拟UITabBarController的自定义视图控制器的应用程序。我看不到一种方法可以将我的应用程序重构为在任何时候只显示一个UIViewController或其子类

更新


无法为UIWindow对象为接口定向事件处理调用的UIViewController找到一致的答案或显示的行为,我的结论是,唯一正确的答案是根本没有答案:只是不要在同一屏幕上使用多个自定义UIViewController,UINavigationController和UIAbbarController除外。

我不确定我能否回答您的主要问题,但就您为什么需要多个视图控制器的示例而言,这些只是视图。我制作了很多具有多个表视图的应用程序,但我使用常规的UITableView,而不是UITableViewController。UITableViewController几乎只是一个用于管理单个UITableView的默认视图控制器,它实际上没有什么作用


听起来您可能正在使用视图控制器,常规视图可能就足够了。

首先或最后一次将视图放置在窗口中的视图控制器很抱歉,我忘了是哪个视图控制器。这种行为是可预测的,但没有记录,因此容易发生变化,所以不要依赖它。只是不要像其他答案建议的那样,让多个视图控制器同时处于活动/可见状态


哦,在您的TabBar示例中,应该可以将UITabBar子类化,或者更好地使用委托。因此,使用UITabBarViewController来管理选项卡,您应该能够使用自定义视图绘制自己的选项卡栏。

不幸的是,在我的应用程序中,它不是我在视图层次结构中始终可见的第一个或最后一个控制器。应用程序总是以相同的顺序创建其控制器,但每次运行应用程序时,获取自动旋转事件的控制器都会发生更改。至于TabBar,说得好——我没有想到。啊,真的。我把UITableViewController的角色与UITableViewDelegate对象混淆了,现在我意识到,当然不需要是同一个对象。谢谢你指出这一点。