2011-03-17 82 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的觀點或任何其父手動添加到視圖層次,而不是推視圖控制器(視圖旋轉但不接收事件)
  • 您添加視圖作爲窗口的第二個孩子(該視圖根本不旋轉)