iOS - 如何推送到视图控制器并在返回时保持正确的 "View Stack"

iOS - How to push to a view controller and maintain the correct "View Stack" when going back

我有一个导航控制器,它包含应用程序的主视图(某种仪表板),然后通过 segues 等分支到应用程序中的其他视图。

有一个汉堡菜单,它使用 Cocoa Pods 滑动视图控制器。基本上,我的问题是是否可以通过菜单导航到特定的视图控制器并保持正确的 "stack" 返回。我知道你可以只推送到一个控制器,但我想(如果可能的话)保留视图层次结构。

例如

第 1.3 页的菜单中有 link

我希望能够推送到第 1.3 页

然后使用该视图上的后退按钮转到 第 1.2 页,然后是 第 1.1 页 等等。

我不确定这是否是 iOS 应用程序中的标准做法,还是采用 Android 风格的方法并仅向堆栈添加视图而不用担心尝试当他们返回视图时形成正确的导航结构。

希望所有这些都有意义。

我在项目中遇到了同样的问题,这是我的经验。 如果你只想做简单的跳转,可以试试三个基本的导航功能:

[self.navigationController popToRootViewControllerAnimated:YES]
[self.navigationController popToViewController:[[self.navigationController.viewControllers count] - mypopcount] animated:YES];
[self.navigationController popViewControllerAnimated:YES];

把动作和按钮绑定起来,就可以了。 但是,如果你想在ios做更灵活的页面跳转,你必须考虑: 首先,你需要确认这些view controller之间没有直接的数据交互,也就是说你需要coreData或者其他sqlite工具来存储数据,目的页面才能自己加载数据。 其次要考虑策略,页面跳转是pop allviewcontroller然后push一个新的,或者pop或者push一个新的就在导航栈上。 祝你好运!

如果您愿意在代码中而不是在 segue 中执行此操作,则可以使用 UINavigationController 的 setViewControllers:animated: 方法(请参阅 documentation)。您将需要实例化相关的 VC,用任何相关的 data/state 初始化它们,然后按照从根视图控制器到顶视图控制器的顺序用它们构建一个数组:

NSArray *newStack = @[rootVC, ..., page11VC, page12VC, page13VC];
[self.navigationController setViewControllers:newStack animated:YES];

然后从 page13VC 弹出将转到 page12VC,等等。您可以使用导航控制器的 viewControllers 属性 获取 rootVC 和任何其他预先存在的 VC。