在 CocoaTouch (UIKit) 中表示线性过程的正确方法是啥?
Posted
技术标签:
【中文标题】在 CocoaTouch (UIKit) 中表示线性过程的正确方法是啥?【英文标题】:What's the correct way to represent a linear process in CocoaTouch (UIKit)?在 CocoaTouch (UIKit) 中表示线性过程的正确方法是什么? 【发布时间】:2010-06-02 20:34:16 【问题描述】:我需要在 iPad 应用程序中表示一个线性过程(思考向导)。
原则上,我可以使用 UINavigationController 并为流程的每个步骤不断推送新的控制器。但这似乎相当低效,因为我正在建模的过程没有向后导航的概念,因此所有以前的视图都会毫无意义地停留并耗尽资源。
目前,我一直在向一个“主”视图控制器添加和删除子视图,并且基本上换出了内容。这可行,但感觉相当笨拙,我希望有更好的方法来实现这一点。
此外,视图之间还需要有动画过渡。 (我现在通过 beginAnimations / commitAnimations 进行这项工作)
更新: 为了澄清我的问题:我知道向导通常有一个后退按钮。这不是我在这里建造的。 必须显示的过程可能有很多步骤(在某些情况下可能高达 30-40 左右),所以我真的不想让 39 个过时的视图控制器占用 ram。
【问题讨论】:
即使是桌面上的向导设计也允许您在堆栈中向后导航,因此您的设计特别不标准。如果您认为您的用户可能希望能够“返回”导航,那么您应该重新设计。 我正在构建的不是我仅用于解释目的的向导。在这个过程中绝对没有向后导航,这是应用程序的核心设计标准之一 【参考方案1】:能否将每个视图控制器的navigationItem
的backBarButtonItem
设置为nil
,这样就不会显示返回按钮?
【讨论】:
这可能有助于隐藏 NavigationController 的栏,但正如我在上面所写的那样,将视图堆叠在一起的概念并不真正符合我的需要,因为我不需要返回到以前的视图。 @UloPe 对。我的建议是完全删除后退按钮。这样您无法返回到不同的视图。 我明白这一点,但我仍然会有一堆旧的视图控制器,我不会在后台再次“闲逛”。 推送一个新的vc后修改导航控制器的栈怎么办?您可以操作viewControllers
属性以仅拥有最顶部的项目。【参考方案2】:
您可以扩展 uinavigationcontrollerdelegate 并检查每个推送事件的当前堆栈大小。然后,您可以替换为仅包含所需视图控制器的新简化数组。顺便说一句,如果您实现了良好的内存管理并释放 viewDidDisappear 上的每个资源,我很确定操作系统管理大量“空”视图控制器不是问题。 希望对你有帮助
【讨论】:
有趣的想法。我会试试的。以上是关于在 CocoaTouch (UIKit) 中表示线性过程的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章