2010-04-11 136 views
16

我試圖將三個視圖控制器推到導航控制器上。將多個視圖控制器推入導航控制器堆棧的問題

[self.navigationController pushViewController:one animated:YES]; 
    [self.navigationController pushViewController:two animated:YES]; 
    [self.navigationController pushViewController:three animated:YES]; 

期望的行爲是鑑於三會顯示出來,當按下後退按鈕就會去查看兩個,然後查看一個...

而實際上,這種觀點是一個可見並按回去查看兩個,然後再回到查看一個。也就是說,視圖一顯示而不是視圖三。

很奇怪的是,在上面的調用顯示正確的條目後,看着navigationController的viewController數組,並看着visibleViewController屬性顯示它有三個視圖...即使視圖是可見的。

如果我從可見視圖導航到一個子視圖(顯示在視圖三的位置)並從該子視圖向後按回...它將查看三個視圖。

它看起來像它顯示視圖中的一個,但他知道這是在視圖中的三個...

我完全糊塗了...任何想法?

吉姆

回答

35

對於前兩個推,不傳動畫標誌爲YES,將其設置爲NO:

[self.navigationController pushViewController:one animated: NO]; 
[self.navigationController pushViewController:two animated: NO]; 
[self.navigationController pushViewController:three animated: YES]; 

這會給你你想要的效果。否則,你會混淆動畫系統,因爲它試圖將三個視圖動畫到同一個空間。

+1

傑出。謝謝Ben! jim – Jim 2010-04-12 10:42:13

+0

很好的答案,如果這是我的問題,我會接受這一個。使用XCode 5和iOS 7修復了這個問題。 – 2013-11-18 15:55:24

+0

謝謝你,太糟糕了OP從未接受過它,因爲它是正確的答案。不知道如果mods可以做到這一點? – 2013-12-25 20:35:09

13

當前最有回報的答案的問題是,在第三個變得可見之前,第一個和第二個將在瞬間可見。不是一個大問題,但它不會給用戶留下好印象。您正在尋找的解決方案:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy]; 
[controllers addObject:one]; 
[controllers addObject:two]; 
[controllers addObject:three]; 
[self.navigationController setViewControllers:controllers animated:YES]; 

這將在三個動畫沒有一兩個成爲可見的過程。

+0

這個答案提供了所需的效果,因爲將動畫標誌設置爲「否」的整個目的是我不想看到第一個和第二視圖控制器。 – mrl 2015-06-18 03:37:19

+0

這實際上是正確的答案 – 2015-09-16 11:07:30

相關問題