2011-03-17 84 views
0

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

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

回答

1

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

看到这个:why does viewDidAppear not get triggered? 同样的事情发生了方向变化

因此,有2个可能的原因:

  • 您uisplitviewController的观点或任何其父手动添加到视图层次,而不是推视图控制器(视图旋转但不接收事件)
  • 您添加视图作为窗口的第二个孩子(该视图根本不旋转)