【问题标题】:Jumping between different 'layers' in a UINavigationController在 UINavigationController 中的不同“层”之间跳转
【发布时间】:2012-01-30 15:47:55
【问题描述】:

我遇到了导航控制器的一个小问题。我已经设置了一个带有 2 个“分支”的导航控制器。 像aviewController1>aViewController2>aviewController3,另外一个分支是biewController1>bviewController2。现在我想做的是有一个选项可以从当前位置转到另一个分支的底部(第一个视图)(例如 aviewController3>bviewController1 等)。显然,一个简单的[self.navigationController addSubview:someview.view] 不会完成这项工作,因为它只会让我看到那个视图并且仍然会保留导航控制器的当前堆栈计数。我能得到一些关于如何做到这一点的想法吗?

【问题讨论】:

    标签: ios uiview uinavigationcontroller


    【解决方案1】:

    您可以通过多次调用 pop 来弹出多个堆栈。如果你将所有 popViewController:animated: 调用设置为 NO,它应该是无缝的。

    另外,导航控制器有一个 setViewControllers:animated: 方法,可以让您将整个堆栈换成一组不同的视图控制器。使用它,您可以将现有的视图控制器堆栈复制到一个可变数组中,删除您不想要的,追加您需要的,然后一次性用新堆栈替换旧堆栈。

    【讨论】:

    • 我试过调用 [self.navigationController popViewControllerAnimated:NO];彼此多次,但只有第一个堆栈被弹出。你的意思是这样吗?
    • 您是从其中一个视图控制器中调用它吗?如果是这样,它不会工作不止一次,因为一旦你弹出了你当前正在调用的视图控制器,self.navigationController 将为零,因为该视图控制器不再在导航堆栈中。您需要获取对 navigationController 的引用并将其存储在变量中,然后您可以多次弹出它。例如UINavigationController *controller = self.navigationController; [控制器 popViewControllerAnimated:NO]; [控制器 popViewControllerAnimated:NO];等等……
    【解决方案2】:

    由于导航控制器基本上是一个堆栈,因此安全的方法是简单地弹出 a3、弹出 a2、弹出 a1,然后推送 b1。

    如果分支是您的根控制器,那么您可以通过执行 popto 根控制器来加速它

    【讨论】:

    • 一个愚蠢的问题,但是如何同时弹出多个堆栈?
    • 除非你要进入根控制器,否则我只会一次弹出一个。
    • 我不需要进入根控制器,所以这应该可以工作。但不知何故,当我多次调用 pop 时,它似乎只弹出 1 个堆栈。我从 UIActionSheet 按钮按下调用它,这会导致问题吗?
    • 你从哪里调用你的弹出代码?是否来自正在弹出的视图控制器之一?
    • 是的,您可能需要致电您的代表并从那里进行弹出。在这种情况下,使用 setViewControllers 可能 Nick 的解决方案会更好地工作——我不知道这个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多