簡體   English   中英

UINavigationController是否有多個根視圖控制器?

[英]Multiple root view controllers for UINavigationController?

我試圖在幾個表視圖之間切換,作為導航控制器的根。 根據我的應用程序的設置,我想通過不同的方法使用不同的數據集,並希望將它們封裝在單獨的類中。

我的想法是將視圖管理器類(UIViewController)設置為導航控制器的根視圖控制器。 在視圖管理器中,我們檢查設置以查看要加載的視圖:

if([application_mode intValue]==APPLICATION_MODE_A){
    AViewController *aView = [[DeviceTableViewController alloc] init];
    [self.view insertSubview:aView.view atIndex:0];
}
else if([application_mode intValue]==APPLICATION_B){
    BViewController *bView = [[BViewController alloc] init];
    [self.view insertSubview.bView.view atIndex:0];
}

實際上,確實的確將適當的視圖插入到視圖管理器中,但代價是在插入的視圖的頂部有一個白條,而導航條上沒有任何信息,即子視圖未連接到導航控制器。

正確的方法是什么? 我真的不希望有一個巨大的表視圖!

您在哪里設置navigationController的rootViewController 您現在不能將其設置為AviewController的對象還是BViewController的對象嗎? 您可能不需要中間的UIViewController

一開始我會做的:

//navigationController comes from a Xib or previous code
if([application_mode intValue]==APPLICATION_MODE_A){
    AViewController *aView = [[DeviceTableViewController alloc] init];
    navigationController.rootViewController = aView;
    [aView release];
}
else if([application_mode intValue]==APPLICATION_B){
    BViewController *bView = [[BViewController alloc] init];
    navigationController.rootViewController = bView;
    [bView release];
}

由於沒有視圖控制器約束,所以我喜歡Jonah William的博客中概述的方法:

http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

您不能有效地將視圖控制器放置在另一個視圖控制器中。 相反,我們使用類似的生命周期方法(viewDidLoad,viewDidAppear等)創建某些東西,並將這些方法從父對象轉發給子對象。 這個'psudo-viewcontroller'具有一個view屬性,我們使用UIView addSubView作為子視圖添加到父視圖中

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/addSubview

使用這種方法,我們可以封裝視圖元素,在視圖控制器中動態地將它們切換出來,將多個元素放置在單個視圖控制器中,等等。這樣,就可以將它們與導航堆棧分開考慮。 這需要一些工作,但是我認為iOS 4是最干凈的UI封裝方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM