【问题标题】: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。

【问题讨论】:

  • 即使是桌面上的向导设计也允许您在堆栈中向后导航,因此您的设计特别不标准。如果您认为您的用户可能希望能够“返回”导航,那么您应该重新设计。
  • 我正在构建的不是我仅用于解释目的的向导。在这个过程中绝对没有向后导航,这是应用程序的核心设计标准之一

标签: iphone cocoa uikit ipad viewcontroller


【解决方案1】:

能否将每个视图控制器的navigationItembackBarButtonItem 设置为nil,这样就不会显示返回按钮?

【讨论】:

  • 这可能有助于隐藏 NavigationController 的栏,但正如我在上面所写的那样,将视图堆叠在一起的概念并不真正符合我的需要,因为我不需要返回到以前的视图。
  • @UloPe 对。我的建议是完全删除后退按钮。这样您无法返回到不同的视图。
  • 我明白这一点,但我仍然会有一堆旧的视图控制器,我不会在后台再次“闲逛”。
  • 推送一个新的vc后修改导航控制器的栈怎么办?您可以操作 viewControllers 属性以仅拥有最顶部的项目。
【解决方案2】:

您可以扩展 uinavigationcontrollerdelegate 并检查每个推送事件的当前堆栈大小。然后,您可以替换为仅包含所需视图控制器的新简化数组。顺便说一句,如果您实现了良好的内存管理并释放 viewDidDisappear 上的每个资源,我很确定操作系统管理大量“空”视图控制器不是问题。 希望对你有帮助

【讨论】:

  • 有趣的想法。我会试试的。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2011-11-01
相关资源
最近更新 更多