2011-08-24 56 views
1

我有兩個UIViewControllers,UIViewControllerParent和UIViewControllerChild。裏面UIViewControllerParent我實例化一個孩子控制器並添加其觀點,作爲一個子視圖:如何處理子視圖的方向更改

UIViewControllerChild *child = [[UIViewControllerChild alloc] init]; 
[self.view addSubView:child.view]; 

現在,當方向的變化,只有父viewcontrollers shouldAutorotateToInterfaceOrientation方法被調用,只有父母取向的變化。兒童的AutorotateToInterfaceOrientation方法沒有被調用並且它的視圖不能旋轉是否是正確的行爲?

如果是這樣,獲取子視圖旋轉的最佳實踐方法是什麼?應該有辦法讓孩子控制器自動佈局,我只是不知道如何。

有什麼建議嗎?

回答

4

只有父viewcontrollers shouldAutorotateToInterfaceOrientation方法被調用

這是正常的。父視圖的控制器負責確定支持哪些方向。從Apple

注意:您可以添加一個視圖控制器的財產的UIView作爲一個子視圖 到另一個視圖控制器。在這樣做時,兩個視圖都將旋轉,但父視圖控制器仍然負責通過其shouldAutorotateToInterfaceOrientation 方法確定支持的方向。

其他幾件你要檢查的東西也在該鏈接中詳細說明。

+0

只是爲了清楚我的問題到底是什麼。我在窗口中添加了我的視圖作爲子視圖,而不是在視圖上。 – Craigt

2

這裏是由蘋果公司提供了一個項目,以表示將方向改變不同XIBs涉及:https://developer.apple.com/library/ios/#samplecode/AlternateViews/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008755

否則,如果你想要把一個子視圖到前面,當方向的變化,使用此代碼:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) { 

     [self.view bringSubviewToFront:portraitView]; 

    } else { 

     [self.view bringSubviewToFront:landscapeView]; 

    } 
} 

請記住在頭文件中定義一個新的UIView並將其鏈接到XIB文件中。

0

最好不要在ViewController中創建ViewController。

在您的情況下,您可以將子ViewController的視圖的引用添加到根ViewController。並保留由根ViewController管理的所有內容。