查看控制器层次结构和设备方向更改

时间:2011-03-17 21:37:03

标签: ios view controller uisplitviewcontroller

当发生方向更改并随后向视图控制器通知更改时,整个根视图及其所有子视图是否都会收到这些通知?我已经为该根视图创建了一个根视图和一个子视图。子视图的控制器(以及此层次结构中的任何子视图控制器)是否接收到因设备方向更改而导致的所有旋转处理?

我问,因为嵌套在这个层次结构中的是UISplitViewController的视图,我怀疑它没有收到设备方向更改的通知。即我基本上有类似A - > B - > C在我的视图层次结构中,其中C是UISplitViewController的视图。

1 个答案:

答案 0 :(得分:1)

当方向发生变化时,只有窗口的第一个视图与其整个层次结构一起旋转。 在viewControllers方面,第一个视图的viewController将获取方向更改事件(和viewWill / DidAppear事件)以及由它生成的所有viewControllers。通过spawn我的意思是一个viewcontroller,使用uitabbarViewController的选项卡显示,或添加到导航控制器,或以模态显示。 换句话说,如果层次结构中的某个位置手动将viewcontroller的视图添加到窗口或其他视图中,则该viewcontroller将不会获得任何事件。

请参阅:why does viewDidAppear not get triggered? 方向变化也会发生同样的事情

因此有两个可能的原因:

  • 您的uisplitviewController的视图或其任何父视图被手动添加到视图层次结构中,而不是推送视图控制器(视图被旋转但不接收事件)
  • 您将视图添加为窗口的第二个子项(视图根本不会旋转)