【问题标题】:Alternative to creating a stack of modal UIViewControllers?替代创建模式 UIViewControllers 堆栈?
【发布时间】:2011-05-24 15:58:03
【问题描述】:

我有一个用户通过一系列“关卡”的情况。每个级别都有自己的 UIViewController。现在,我只是像这样呈现下一个级别:

// in level 1 view controller, for example, here's how we go to level 2
[self presentModalViewController:level2VC animated:YES];

这很好,也很简单,但显然它会导致 UIViewController 的堆栈非常大。理想情况下,我想做一个很好的视觉过渡(如交叉溶解)到下一个级别的 UIViewController,然后 release 最后一个以节省内存,但我认为这会导致不稳定,因为我'会以这种方式释放父视图控制器。

那么最好的方法是什么?

谢谢!

【问题讨论】:

    标签: iphone uiview uiviewcontroller modal-dialog


    【解决方案1】:

    这就是 UINavigationController 的用途! Class Reference

    【讨论】:

    • 但是,如果我使用 pushViewController,在这种情况下,我是否还会创建不断增长的 UIViewController 堆栈?
    【解决方案2】:

    UINavigationController 是您所描述的那种 UI 的常用习语。

    您通过执行:pushViewController:animated: 推送一个新的视图控制器,这也提供了您正在寻找的过渡效果。

    无论如何,请记住,这完全是为了“导航”:即来回移动。所以,它不仅仅是前进,除非您通过隐藏“返回”按钮[self.navigationItem setHidesBackButton:YES animated:YES]来自定义导航栏。

    此外,所有UIViewControllera 都保存在内存中(始终),只有在内存不足的情况下(-[didReceiveMemoryWarning][1]),“受控”视图才会自动释放,从而恢复内存。如果发生这种情况,您需要确保能够在用户返回时再次加载视图。

    如果你真的关心内存(虽然我认为这不应该是一个问题),你甚至可以在推动下一个控制器之前考虑“弹出”(即移除)当前控制器。这将忍受非常“扁平”的控制器层次结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2011-06-27
      • 2013-04-03
      • 2015-06-16
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多