【问题标题】:Pop current UIViewController and push another one弹出当前 UIViewController 并推送另一个
【发布时间】:2012-09-18 19:46:48
【问题描述】:

我目前正在显示 UIViewController B。我想推 UIViewController C 并立即从导航堆栈中删除 B,同时保留所有动画。最好的方法是什么?

最终堆栈将是AC

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    我不确定这是否是个好主意,但您可以这样做。

    在您的 C 视图控制器中,例如在 viewDidLoad 方法中放置此代码

    NSMutableArray *viewControllerAfterRemove=[[NSMutableArray alloc]initWithArray:self.navigationController.viewControllers];
    [viewControllerAfterRemove removeObjectAtIndex:1];
    self.navigationController.viewControllers=viewControllerAfterRemove;
    

    现在,当您在 C 视图控制器中 popViewController 时,它会导航回 A 视图控制器

    【讨论】:

    • 我建议向数组询问“self”的索引,然后删除 index-1 处的对象(假设它是 0 或正数。其次,我不确定你想要在 viewDidLoad 中执行此操作,而不是查看使用 viewDidAppear(也就是说上面的答案可能会正常工作)。
    • @DavidH 我同意你的第一部分,但关于第二部分,我建议在 viewDidLoad 中而不是在 viewDidAppear 中这样做,因为,假设你在 C 视图控制器之外有更多的视图控制器,如果你在视图控制器 C 之后将视图推到更远的位置(例如,让我们说 C=>D 视图控制器)然后将应用程序导航回 D=>C 它从 self.navigationController.viewControllers 中删除一个对象,这是不必要的,因为 viewController B 有应用从 B=>C 导航时已被删除。
    • 我在自己周围做了一些处理,当我这样做时,我使用一个标志来确定这是否是 viewDidAppear 中的第二次。我只是担心在 navController 将一个动画显示在视图中时与 viewControllers 混在一起。它要么工作要么不工作;无论如何,都会有您建议的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多