我想知道如何初始化一個UINavigationController爲了顯示堆棧中的第三個視圖控制器?有點像郵件應用程序。即使你殺了這個應用程序,當你啓動它時,你會看到包含所有郵件的視圖控制器,並在那裏有「後退」按鈕,允許你訪問你的郵箱列表。iOS - 如何初始化UINavigationController以顯示推送的ViewController?
感謝您的回答。
我想知道如何初始化一個UINavigationController爲了顯示堆棧中的第三個視圖控制器?有點像郵件應用程序。即使你殺了這個應用程序,當你啓動它時,你會看到包含所有郵件的視圖控制器,並在那裏有「後退」按鈕,允許你訪問你的郵箱列表。iOS - 如何初始化UINavigationController以顯示推送的ViewController?
感謝您的回答。
你可能想看看進入UINavigationController
的setViewControllers:animated:
方法:
參數
viewControllers
視圖控制器堆棧中佔有一席之地。此數組中控制器的前後順序表示導航堆棧中控制器的從下到上的新順序 。因此, 添加到陣列的最後一項成爲 導航堆棧的第一項。
動畫
如果是,動畫或推頂視圖控制器的彈出。如果否,請在沒有任何動畫的情況下更換視圖控制器。
討論
您可以使用此方法來更新或替換當前視圖 控制器堆棧沒有推或彈出每個控制器 明確。此外,通過此方法,您可以更新一組 控制器而不更改動畫,在您希望將導航控制器返回到 以前的狀態時,在啓動時可能適當地選擇 。
如果啓用了動畫,則此方法根據數組 中的最後一項是否已位於導航堆棧中來決定執行哪種類型的 轉換。如果視圖控制器當前在堆棧中,但不是最上面的項目,則該方法使用 彈出轉換;如果它是最上面的項目,則不執行轉換 。如果視圖控制器不在堆棧上,則此方法 使用推送轉換。只執行一次轉換,但當轉換完成時,堆棧的全部內容將被替換爲新視圖控制器的 。例如,如果控制器A, B和C位於堆棧上並且您設置了控制器D,A和B,則此方法使用彈出轉換,並且生成的堆棧包含控制器D,A和B的 。
狀況
可用在IOS 3.0和更高。
使用popToViewController。
navigationController.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, thirdVC, nil];
[navigationController popToViewController:thirdVC animated:NO];
注意:確保animated設置爲NO。
當您的應用程序存在時,您必須將其狀態存儲在UserDefaults
中。您可以使用應用程序委託方法- (void)applicationWillTerminate:(UIApplication *)application
來完成此操作。
然後,當應用程序再次啓動時,您從UserDefaults
中檢索該信息,並初始化您想要在視圖控制器層次結構中使用的視圖控制器。然後使用以下方法將它們添加到UINavigationController
:setViewControllers:animated:
。
您仍然可以像正常一樣初始化導航控制器,但在顯示之前將第二個和第三個視圖控制器放到它上面。因此,如果您在應用代理的應用中執行此操作:didFinishLaunchingWithOptions:
UIViewController *firstController = [[[FirstViewCon alloc] initWithNibName:@"MyFirstViewCon" bundle:nil] autorelease];
UIViewController *secondController = [[[SecondViewCon alloc] initWithNibName:@"SecondViewCon" bundle:nil] autorelease];
UIViewController *thirdController = [[[ThirdViewCon alloc] initWithNibName:@"ThirdViewCon" bundle:nil] autorelease];
UINavigationController *theNavCon = [[[UINavigationController alloc] initWithRootViewController:firstController] autorelease];
[theNavCon pushViewController:secondController animated:NO];
[theNavCon pushViewController:thirdController animated:NO];
self.window.rootViewController = theNavCon;