3

我有一個UINavigationController。在我的層次結構的第二層,我想用一個工具欄顯示一個視圖控制器,我在其中插入了一個分段控件。通過它,用戶可以在我們可以調用A和B的同一頁面的兩個「視圖」之間進行選擇(如在日曆應用程序中)。如何在不使用標籤欄的情況下在UIViewControllers之間切換?

當用戶按A段時,必須顯示A視圖。當用戶按下B段時,必須顯示B視圖。

A和B是複雜的視圖,所以我更願意在稱爲AViewController和BViewController的兩個單獨的視圖控制器中管理它們。

最初我曾想過要在UITabBarViewController中插入AViewController和BViewController,但是在pushViewController中:animated:official documentation我讀到推送的視圖控制器「不能是標籤欄控制器的實例。」

你知道如何在不使用UITabBarViewController的情況下在AViewController和BViewController之間切換?

非常感謝!

回答

2

你可能想看看UISegmentView,它會給你幾個按鈕,你可以用它來改變視圖內容。

另一種選擇是使用信息按鈕,在視圖之間有一個漂亮的翻轉過渡。

第三個選項是讓工具欄按鈕將您的第二個視圖作爲模式視圖,並在該屏幕上有一個關閉按鈕,使其自行解散。

的技術答案

創建包含UISegment視圖和2個視圖控制器實例變量,AViewControllerBViewController容器視圖控制器。同樣在你的主視圖控制器中,有一個容器視圖爲子視圖設置適當的框架。實例兩者在viewDidLoad但只顯示當前選中的一個...

-(void)showAppropriateView { 

    if([segment selectedIndex] == A_VIEW_SEGMENT) { 
     [self.containerView addSubView:aViewController.view]; 
     [bViewController.view removeFromSuperView]; 
    } else { 
     [self.containerView addSubView:bViewController.view]; 
     [aViewController.view removeFromSuperView]; 
    } 
} 

調用此方法的UISegmentView變化時。

+0

謝謝您的回答。可能我沒有解釋清楚我的問題。從圖形角度我有一個清晰的想法,但我的問題是技術性的。問題是我有2個視圖控制器,AViewController和BViewController,我想在用戶點擊相應的段時切換它們。就像在日曆應用程序中一樣,用戶可以點擊「列表」,「日」和「月」。不使用標籤欄控制器,也不使用模態視圖控制器。再次感謝。 – Larry 2010-03-05 13:53:00

+0

我更新了一些更多的細節。 – 2010-03-05 14:42:36

+0

謝謝Ben!真的很有幫助。你知道如果做這樣的方法查看{Will,Did}出現:AViewController和BViewController是否被調用?這對我來說很重要。我需要一些能夠自動完成所有工作的東西,就像標籤欄控制器一樣...... – Larry 2010-03-05 14:51:09

2

我將作爲一個視圖的子視圖的意見同時添加(稱之爲rootView),並使用bringSubviewToFront顯示它們:

// display view A 
[rootView bringSubviewToFront:AViewController.view]; 

// display view B 
[rootView bringSubviewToFront:BViewController.view]; 
+0

謝謝。但是這樣做,viewWillAppear:,viewDidAppear:,viewWillDisappear:和viewDidDisappear:AViewController和BViewController的方法被調用?如果是的話,這是我n EED。謝謝。 – Larry 2010-03-05 13:57:37

+0

我期望如此。但是,如果不是,你可以總是手動調用他們 – pheelicks 2010-03-05 14:01:10

+0

我不想手動調用它們。我需要一些能夠自動完成所有工作的東西,就像標籤欄控制器一樣......無論如何,現在我試試。謝謝。 – Larry 2010-03-05 14:04:58