直接从任何地方呈现深层嵌套视图控制器,同时保留层次结构

时间:2017-02-19 21:37:15

标签: ios swift swift3

我正在开展一个大项目,堆栈如下。

我有一个UITabBarController,每个标签都有一个UINavigationController,包含一个或多个UIViewControllers。

UITabBarController> UINavigationController> UIViewController1> UIViewController2> ...

正常流程是用户点击每个视图控制器。但是,我如何直接打开应用程序UIViewController2,同时保留层次结构?

我明确地不想从AppDelegate呈现模态视图或将视图控制器推送到其他地方。所需的行为类似于聊天应用,可以打开特定的聊天UIViewController2(例如,来自推送通知),但仍然可以“返回”到聊天列表视图(此示例中为UIViewController1,即使应用已直接启动到UIViewController2并且UIViewController1也从未显示过。

另一个用例是从另一个选项卡而不是AppDelegate执行相同操作。从标签2的某个位置,在标签1中打开UIViewController2

如何实现这一目标?我想到了不同的选择,但不知道如何实现它们

  • 正常构建层次结构,但不向用户显示,当达到UIViewController2时,会显示所有内容?
  • 现在UIViewController2然后以静默方式构建它上面的层次结构?

1 个答案:

答案 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;