簡體   English   中英

如何模擬Apple的“ Notes”並使用帶有“后退”視圖的導航控制器啟動應用程序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM