我正在开展一个大项目,堆栈如下。
我有一个UITabBarController,每个标签都有一个UINavigationController,包含一个或多个UIViewControllers。
UITabBarController> UINavigationController> UIViewController1> UIViewController2> ... 的
正常流程是用户点击每个视图控制器。但是,我如何直接打开应用程序UIViewController2
,同时保留层次结构?
我明确地不想从AppDelegate呈现模态视图或将视图控制器推送到其他地方。所需的行为类似于聊天应用,可以打开特定的聊天UIViewController2
(例如,来自推送通知),但仍然可以“返回”到聊天列表视图(此示例中为UIViewController1
,即使应用已直接启动到UIViewController2
并且UIViewController1
也从未显示过。
另一个用例是从另一个选项卡而不是AppDelegate执行相同操作。从标签2的某个位置,在标签1中打开UIViewController2
。
如何实现这一目标?我想到了不同的选择,但不知道如何实现它们
UIViewController2
时,会显示所有内容?UIViewController2
然后以静默方式构建它上面的层次结构?答案 0 :(得分:2)
但是我如何直接打开应用程序到UIViewController2,同时保留层次结构?
通过编程方式修改UINavigationController
的{{1}}数组层次结构
假设您目前在viewControllers
,构建backstack层次结构的示例代码可以是:
UIViewController2
执行此操作的好地方是当前显示的视图控制器的NSMutableArray *controllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
UIViewController1 *VC1 = [UIViewController1 new];
[controllers insertObject:VC1 atIndex:(controllers.count - 1)]; // choose the index
self.navigationController.viewControllers = controllers;
。