有没有办法显示已加载的视图控制器?

时间:2016-05-26 20:29:28

标签: ios uiviewcontroller

我有一个包含5个视图的应用程序,主要包括下钻。

让我说我深入到第4个视图控制器。有没有一种方法可以完全呈现​​第二个视图控制器,而无需重新创建它并以模态方式显示该视图?

钻取有点左右,我不想强​​迫用户在第一个视图上重新选择他们的选择以将它们带入第二个视图

所以就像这样(tvc = tableviewcontroller)

tvc1 > tvc2 > tvc3 > tvc4 > tvc2 > tvc5
         ^                   ^
         these two views are the same view in memory

3 个答案:

答案 0 :(得分:2)

当它已经在"堆栈中时,你不能再呈现tvc2"提出的视图控制器。

如果将视图控制器推送到导航控制器的堆栈,则可以通过分配其viewControllers属性或发送{{1}来更改该堆栈中视图控制器的顺序。 }。如果您不希望用户看到它,您可以隐藏其导航栏。我不认为将同一个视图控制器同时放在两个地方的堆栈中是安全的。

答案 1 :(得分:1)

您可以迭代可见的viewControllers,并使用is转换运算符来检查它是否是那种类型。然后找到视图控制器并弹出它。

目标-C

for (id viewController in self.navigationController.viewControllers) {
    if ([viewController isKindOfClass:[ViewControllerClass class]]) {
        [self.navigationController popToViewController:viewController animated:TRUE];
    }
}

Swift 2.0

for viewController in self.navigationController!.viewControllers {
    if viewController is ViewControllerClass {             
        self.navigationController?.popToViewController(viewController, animated: true)
    }
}

答案 2 :(得分:0)

UINavigationController有一个名为viewControllers的数组。这将为您提供该导航堆栈中存在的UIViewControllers列表。

您可以尝试以下内容:

UIViewController *yourTableViewController = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourTableViewController)];

希望这有帮助。