2010-09-09 49 views
1

我的iPad應用程序中有一個相當簡單的視圖層次結構。在自動旋轉後向子視圖發送消息

窗口 - > RootView - >的TableView /的DetailView

TableView中和的DetailView是添加作爲子視圖(按溶液到前面的問題)兄弟姐妹。 啓動時TableView在前面。當你選擇一個單元格時,應用程序委託中的方法被調用,將它們交換出來,將DetailView放在前面。 DetailView中的關閉按鈕反過來。

工程很好。

但是...... 的DetailView包含一個UIScrollView,在的.xib 繪製當的DetailView談到前我有收到的,其選擇觸發改變的單元格的內容細節的方法。這將使用標籤內容和圖像填充詳細視圖。 這些標籤是IBOutlets到.xib中標籤的簡單設置器。 圖像的大小設置爲UIScrollView的高度,保持高寬比。這是以編程方式完成的,將它添加到添加到UIScrollView的UIImageView中。

我對肖像的行爲是好的。 當它旋轉到風景時,我想調整圖像的大小以匹配封閉UIImageView(以及隨後的封閉UIScrollView)的寬度。 我有一些偉大的代碼來實際調整圖像的類別除了從UIImage的[鏈接]的(禮貌[1]

問題... ... 只有RootViewController的響應呼叫didRotateToInterfaceOrientation。 我需要從這個消息發送到DetailViews控制器上的一個方法,告訴它調整圖像的大小然後重畫相關的UIImageView。 引用子視圖的控制器看起來應該很簡單,可能我錯過了一個簡單的答案。使用:

[[self.view.subviews objectAtIndex:1] didRotateFromInterfaceOrientation:fromInterfaceOrientation]; 

and

[self.view viewWithTag:[[self.view.subviews objectAtIndex:1] tag]] 

但他們都返回視圖不是視圖控制器,因此當我嘗試運行時,對選擇器感到憤怒。

任何人都可以指點我嗎?

回答

0

的調用所有調用旋轉方法的最佳方式您的視圖控制器將使用Apple提供的根視圖控制器並通過這些控制器顯示任何子視圖。這些包括UINavigationController,UITabBarController和iPad UISplitViewController。

導航事件只會發送到根視圖控制器,即應用程序的主UIWindow中視圖的視圖控制器。這沒有記錄,但可以通過一些工作來推斷。蘋果的根視圖控制器似乎能夠傳播旋轉事件。

這可以手動實現(即不需要Apple RVC),但需要跟蹤所有的孩子VC並在一些只讀屬性上使用KVC,這很可能會讓您退出應用商店。

對於您的情況,您可以使用使用導航控制器,根據需要隱藏導航欄和工具欄。使用當前的根視圖控制器初始化它,並將導航控制器視圖添加到窗口中,而不是當前的根視圖控制器。當您需要顯示詳細信息時,只需按導航堆棧上的詳細信息即可。如果您不喜歡默認動畫,則可以使用一些小工作來應用自己的轉換。

有關導航控制器的更多詳情,請參見下文。

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html

1

感嘆。好像寫出來的問題的過程中幫助我更好地制定它在我的腦海裏找到答案......

參考應用程序委託已具有的視圖控制器連接...

[[(AppDelegate *)[[UIApplication sharedApplication] delegate] detailViewController] methodToCall];