2

我知道我可能會因爲沒有正確閱讀HIG或某些文檔而遭到批評,但是經過幾次培訓視頻並在iPhone上構建了一些小型項目之後,我現在試圖將所有東西放在一起iPad,以及我的大腦傷害。如何將iPad視圖分解爲更易於管理的塊?

我明白了iPhone上的想法,即一個視圖=一個屏幕和一個視圖=一個視圖控制器。但是現在我正在處理可以同時顯示多個事物的硬件,我不太瞭解我應該如何使用它。

我給出的例子是當前的項目...我爲不同的屏幕內容(閃屏,​​菜單,文章視圖等)組合了一堆不同的視圖控制器。但隨後一些屏幕共享內容。例如,菜單和文章屏幕都有一個菜單欄(如工具欄),從屏幕頂部向下滑動並提供導航。此外,我有一個導航元素,應該從屏幕底部向上滑動以導航到不同的文章。這些是我在許多其他iPad應用程序中看到的(Wired是一個示例)。

但我不應該在屏幕上一次放置多個視圖控制器,是嗎?不僅如此,但如果我這樣做,自動旋轉功能開始有點精神。但是如果我把所有東西都放到一個視圖控制器中,我最終會得到1000行代碼,其中大部分代碼都需要複製粘貼到其他視圖控制器中。對我來說,這似乎是一個非常醜陋的解決方案。

所以我很明顯做錯了什麼......但我該怎麼做?即使有人可以請我指出我應該閱讀的信息的方向,我會非常感激。

謝謝!

:-Joe

回答

2

您沒有禁止顯示的時間,其中視圖控制器是一個以上的視圖只查看經理駐留是存儲器。

您可以創建一個自定義視圖控制器來管理您的視圖控制器。把它想象成UINavigationController或者UISplitViewController。

你有viewControllers

@property (nonatomic, retain) NSMutableArray *viewController; 

/* 
Do not use this code in production, its just for the example 
*/ 
- (void)presentViewController:(UIViewController *)controller inRect:(CGRect)rect { 

    // check if viewcontroller is valid object 
    if (controller == nil) { 
     return; 
    } 

    // retain the controller 
    [self.viewController addObject:controller]; 

    // position controllers view in the desired rect 
    // (in your implementation you might create a zones and use them instead) 
    controller.view.frame = rect; 

    // you might want to provide some animation capabilities here 
    [self.view addSubview:controller.view]; 
} 

現在,因爲你需要,你可以在屏幕上用自己的視圖控制器許多意見的一個NSMutableArray。你可能有嵌套的視圖控制器,例如: ViewControllerManager-> NavigationController - > [ViewControllers];

P.S.當然,完整的實現將更加複雜,您需要調用viewcontrollers viewWill/viewDid,管理viewcontroller視圖動畫(呈現和解散),lowMemoryWarning上的內存管理(清除不可見或未使用的視圖控制器)等等。

希望能有所幫助。 :)

+0

嗨,感謝您的建議......你提供的代碼應該在UIViewController本身嗎?我發現,如果我在任何時候在iPad上的屏幕上有多個自定義UIViewController,那麼我會得到零星的結果,例如自動旋轉無法正常工作。但是,我發現自從我可以使用UINavigationController來完成很多腿部工作... – jowie 2011-01-06 22:59:07

+0

對不起,我遲到了。是的,它應該在您的自定義根視圖控制器中,您將從哪裏管理所有子視圖控制器。我也使用UINavigationController作爲我的根控制器,因爲你遇到過同樣的問題。我的結構是:UIWindow-> UINavigationController(HIDDEN) - > MyRootViewController - > [menuControllers,headerControllers,baseControllers]; – ludesign 2011-01-28 01:06:06

1

我認爲你缺少的是你可以混淆哪些不是UIViewControllers。你很對,UIKit希望你一次只顯示一個UIViewController(Apple的容器視圖控制器除外)。然而,單個視圖控制器可以管理許多視圖的層次結構,每個視圖都可能有一個控制器對象來管理它們的一些行爲。然後,您可以在多個視圖控制器中重複使用這些控制器或自定義視圖

+0

這很有趣,但是當你說「每一個都可能有一個控制器對象」時,這些控制器對象會如何體現出來? – jowie 2011-01-06 23:00:02

+0

就像UIViewController是一個具有'view'屬性的類,你可以創建你自己的控制器類,它具有對視圖的引用,充當它們的視圖委託,並且通常填充相同的控制器角色。所以在你的情況下,導航元素可能是一個充滿按鈕的自定義視圖,這些按鈕可能會調用一些負責管理導航界面的自定義控制器類上的IBAction方法。這樣你就沒有一切與單個UIViewController交談,你可以創建一個自定義導航控制器的實例並在需要的地方查看。 – Jonah 2011-01-07 05:07:56