【问题标题】:Transitioning to a view of unknown type in a navigation-based iPhone app在基于导航的 iPhone 应用程序中转换到未知类型的视图
【发布时间】:2009-10-28 00:43:55
【问题描述】:

在我的 iPhone 应用程序中,用户从 UITableView 中选择一个项目来选择要查看的资源。在检索资源之前,处理资源所需的 UIViewController 子类是未知的,这可能需要几秒钟。

为了响应选择操作,我在导航堆栈上推送了一个“正在加载”的视图控制器。该控制器显示一个带有 UIActivityIndi​​catorView 以及(可能)其他状态信息的视图,并启动所选资源的下载。从这个视图中,用户可能会取消下载,在这种情况下我会返回到资源列表。但是,如果资源到达,则会根据其类型创建一个适当的新视图控制器。

这就是它变得粘稠的地方。如果我在导航堆栈上推送新的特定于类型的视图,“加载”视图仍在堆栈中;显然,一旦加载完成,就没有必要“返回”到那个视图了。我尝试简单地将特定于类型的视图添加为“加载”视图的子视图,但这并没有将我的特定于类型的控制器放到导航堆栈上,因此它没有 [self navigationController ] 用于进一步导航。

如何用新视图“替换”导航堆栈上的当前视图?或者,更一般地说,当我还不知道将使用哪个控制器来显示正在检索的资源时,如何显示活动/进度?

我发现了非常酷的“HUD”进度指示器类,但我不希望进度指示出现在所选项目列表的顶部。相反,我希望用户能够感知到他们已经“去了”一个等待填充的新空间。

我对这些东西还很陌生,所以我希望我至少已经连贯地表达了这个问题。感谢任何人都可以提供的任何帮助。

【问题讨论】:

  • 我找到了解决方案,但我不知道这是否是“最佳”(甚至合理)的做法,所以我想保留这个问题。为了替换我的“加载”控制器,我从导航控制器获取整个视图控制器堆栈,removeLastObject 以摆脱“加载”控制器,使用新的特定类型的 addObject,然后将 setViewControllers 设置为更新的堆栈。这看起来合适吗,还是我错过了更优雅的方法?

标签: iphone uiviewcontroller uinavigationcontroller


【解决方案1】:

更新:实际上,将“加载”视图显示为模态视图可能会更好。看看这个question 有几个例子。

你应该pop“加载”视图控制器和push“特定”视图控制器,一旦后者被下载和分配。尝试不为其中一个或两个动作设置动画,看看什么能提供最佳体验。

【讨论】:

  • 我也会尝试一下...看起来比我的方法更干净,但我想知道在过渡过程中是否会有任何视觉“噪音”。
  • 我会更多地研究模态视图控制器,但它们似乎不起作用,因为在传输完成之前我不知道需要创建什么样的控制器。我现在成功地使用了你的 pop/push 方法,但我确实必须小心... [self navigationController] 在当前视图弹出后为零,所以我必须将导航控制器放在一个足够长的临时变量中做这两个操作。谢谢!
  • 我认为“加载”视图将显示为模式视图(而不是您必须为其下载数据的“特定”视图)。
  • 是的...但是模态加载视图的父视图是什么?这就是让我绊倒的部分。
  • 表格视图是开始的地方。用户单击单元格,“加载”视图以模态方式呈现,加载完成,“加载”视图被取消,“特定”视图被分配并推送到导航堆栈上。最后两个步骤可能发生在加载实际完成时调用的方法中(此方法可能在表视图的控制器中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多