![](/img/trans.png)
[英]How do I transfer back to a view controller from a view controller that is not connected to other view controllers?
[英]How do I emulate 'Notes' from Apple and start the app with a navigation controller with a 'back' view?
我有一個具有登錄頁面的應用程序。 然后,將其移至以集合視圖作為其根視圖控制器的導航控制器。 當應用程序啟動且集合中只有一個項目時,我想讓導航控制器自動推送到該項目,並允許用戶使用“后退”來查看集合。 這與Apple的“ Notes”中的行為相同。
這個想法是允許用戶立即開始使用該應用程序,並且僅在使用該應用程序一段時間后才“發現”對收集視圖的需求。
我正在使用IB,情節提要和segues進行視圖轉換。
如果我以編程方式讓根視圖控制器在其viewWillLoad中執行performSegue:我會收到有關在過渡仍在進行中時引起過渡的錯誤。
如果將調用performSegue的代碼移到didLoad中,則用戶會看到雙重轉換。
導航控制器通常自行管理基礎堆棧。 也就是說,您將其傳遞給初始視圖控制器,然后通過segues或pushViewController:animated:
堆棧已更改。 但是,沒有什么可以阻止您手動更改堆棧。 在prepareForSegue:sender:
,您可以檢查項目數,如果為1,則執行以下操作:
UIViewController *singleItemViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SingleItem"];
NSMutableArray *viewControllers = [sender.destinationViewController.viewControllers mutableCopy];
[viewControllers addObject:singleItemViewController];
sender.destinationViewController.viewControllers = viewControllers;
現在,您無需從堆棧的第一個視圖控制器開始,而是從第二個視圖控制器開始,使用后退按鈕可以向后導航。
實際上,我發現以下對我來說效果最好。
if (/* reason to change back list*/) {
UIViewController * rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"backViewController"];
NSArray * viewControllers = @[rootViewController, self];
[self.navigationController setViewControllers:viewControllers animated:NO];
}
setViewControllers似乎是操作堆棧的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.