【问题标题】:Navigation Controller and Title for the previous screen in Navigation?导航中上一个屏幕的导航控制器和标题?
【发布时间】:2011-06-13 19:11:53
【问题描述】:

因此,如果我在一个屏幕上,我可以使用 pushViewController 导航到下一个导航屏幕,然后我只需使用 backButton 到上一个屏幕即可进入下一个屏幕。

前一个屏幕,(后退按钮将我们推到的屏幕)......它有名字吗? (就像 previousViewController os 之类的)??

我提出这个问题的目的:

如果我有 5 个屏幕(分别为 1、2、3、4、5)...假设我从 1 -> 3 导航,在另一种情况下,我从 2 -> 3 导航。我想说如果“PreviousViewController 为 1”,则从 3 导航到 4(1 -> 3 -> 4),否则如果 previousViewController 为 2,我想导航到 3 到 5(2 -> 3 -> 5)...

我该如何完成这样的事情?

谢谢!

附言 我知道我也可以用另一种方法尝试一些明智和合乎逻辑的事情,然后相应地 pushViewController。但是如果有一个检查previousViewController的解决方案,它会让我的任务变得简单,并且会是一次很棒的学习体验。

【问题讨论】:

    标签: iphone objective-c ios xcode uinavigationcontroller


    【解决方案1】:

    您实际上可以通过使用UINavigationControllerviewControllers 属性来做到这一点。这就是Apple says 的内容:

    根视图控制器在数组中的索引 0 处,后视图控制器在索引 n-2 处,顶部控制器在索引 n-1 处,其中 n 是数组中的项目数。

    你的“前一个控制器”就是Apple定义的“后视图控制器”,对应索引n-2:

    NSUInteger arraySize = [navController.viewControllers count];
    UIViewController* prevController = [navController.viewControllers objectAtIndex:count-2];
    

    【讨论】:

    • 太棒了。所以我只是检查数组中的值并做出相应的决定?虽然看起来很简单,但我想知道是否有任何示例代码,这样我就不会出错..
    • Apple 文档非常清晰,因此您应该安全。无论如何,我添加了一个小样本。
    • 好人。事情正在奏效。最后一个问题。我可以检查这样的事情吗?如果 (prevController) 是@class DateInfoViewController 的成员,则执行此操作;否则这样做....?
    • 这里有:if ([prevController isKindOfClass:[DateInfoViewController class]])。如果您认为这个答案适合您的问题,您也可以接受! :-)
    【解决方案2】:

    不,没有previousViewController。 UINavigationController 是作为堆栈实现的,因此您可以不断推送视图控制器,这些控制器可以将自己从堆栈中弹出。

    仅供参考,如果您要查看所有视图控制器堆栈,则 UINavigationController 具有名为“viewControllers”的属性,该属性被实现为 NSArray。

    【讨论】:

    • 让我把我的目标放在这个问题后面,这样你就可以让我知道实施情况。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2020-10-02
    • 2021-11-20
    相关资源
    最近更新 更多