2010-08-24 68 views
7

該程序有一個導航欄,通常當點擊viewController1中的一個按鈕時,它會轉到viewController2。當點擊viewController2中的一個按鈕時,它會轉到viewController3。用戶可以從viewController3導航到viewController2,然後使用導航欄中的後退按鈕導航到viewController1。用iPhone上的UINavigationController跳轉到下一個控制器

我想製作一個按鈕,以編程方式將用戶直接從viewController1中viewController3。那麼用戶可以從viewController3導航回viewController2到viewController1。

有沒有辦法將兩個視圖推入導航控制器?或者是另一種達到預期行爲的方式?我應該如何設計這個?

回答

9

對不起您的問題。因爲你想推2視圖控制器,然後回1 1.我認爲解決方案現在很簡單。

你只需要推視圖控制器的2倍,1無動畫1動畫是這樣的:

[viewController1.navigationController pushViewController:viewController2 animated:NO]; 
[viewController2.navigationController pushViewController:viewController3 animated:YES]; 

所以,對於用戶來說,它偏偏喜歡你只推1,但在幕後,你實際上推2個視圖控制器。然後當你想回來,只需要彈出1 1.

+0

我會在哪裏放popToViewController?在視圖控制器3中的viewcontroller1或viewcontroller2 – Yazzmi 2010-08-24 03:08:56

+0

中,當您處理該按鈕的操作時。 – vodkhang 2010-08-24 03:12:39

+0

你說過「彈出視圖控制器,直到指定的視圖控制器位於導航堆棧的頂部。」你在哪裏指定視圖控制器? – Yazzmi 2010-08-24 03:58:15

0

可以一次推2個視圖控制器,但一旦你推動第一個,當前ViewController的navigationController屬性將成爲零,因爲它是不再位於堆棧頂部,因此您必須對其進行參考。我從來沒有試圖用動畫一次推動2個,我不確定它會如何。

+0

其實我並不需要顯示viewController2只是想確保我可以回到viewController2。 3-> 2-> 1 – Yazzmi 2010-08-24 03:13:55

+0

您必須在某個時刻將其推到導航控制器堆棧上。 – skorulis 2010-08-24 03:47:14

+0

如果你按兩個控制器,第一個按下的按鈕絕對不會變成ni,因爲導航控制器仍然在推動控制器堆棧中引用它。 – imaginaryboy 2010-08-24 04:23:27

4

您可以使用直接在UINavigationController上設置導航堆棧。 setViewControllers:animated:

例如,假設這個代碼是某處viewController1一樣的處理程序按下按鈕,在它的觀點:

NSMutableArray* viewControllers = [self.navigationController.viewControllers mutableCopy]; 
UIViewController* controller = [[MyViewController2 alloc] init]; 
[viewControllers addObject:controller]; 
[controller release]; 
controller = [[MyViewController3 alloc] init]; 
[viewControllers addObject:controller]; 
[controller release]; 
[self.navigationController setViewControllers:viewControllers animated:YES]; 

在隨mutableCopy呼叫頂部的創建業務,這樣你保留導航堆棧上已有的內容。

+0

你需要釋放viewControllers嗎?如果是這樣的話? thx – Yazzmi 2010-08-24 23:41:58

+0

你在哪裏釋放他們可能取決於你保留他們或分配他們的地方。如果你不需要單獨引用它們,那麼只要你把它們放到數組中,就像我在上面的示例代碼中一樣。 – imaginaryboy 2010-08-25 00:47:49

+0

這是做問題問題的恰當方法。推動一個視圖控制器沒有動畫,並立即另一個動畫是脆弱的。它適用於我(在iOS 7中),但最近崩潰了(在iOS 8中)。 – 2014-09-11 17:44:01

相關問題