【发布时间】:2009-10-28 00:43:55
【问题描述】:
在我的 iPhone 应用程序中,用户从 UITableView 中选择一个项目来选择要查看的资源。在检索资源之前,处理资源所需的 UIViewController 子类是未知的,这可能需要几秒钟。
为了响应选择操作,我在导航堆栈上推送了一个“正在加载”的视图控制器。该控制器显示一个带有 UIActivityIndicatorView 以及(可能)其他状态信息的视图,并启动所选资源的下载。从这个视图中,用户可能会取消下载,在这种情况下我会返回到资源列表。但是,如果资源到达,则会根据其类型创建一个适当的新视图控制器。
这就是它变得粘稠的地方。如果我在导航堆栈上推送新的特定于类型的视图,“加载”视图仍在堆栈中;显然,一旦加载完成,就没有必要“返回”到那个视图了。我尝试简单地将特定于类型的视图添加为“加载”视图的子视图,但这并没有将我的特定于类型的控制器放到导航堆栈上,因此它没有 [self navigationController ] 用于进一步导航。
如何用新视图“替换”导航堆栈上的当前视图?或者,更一般地说,当我还不知道将使用哪个控制器来显示正在检索的资源时,如何显示活动/进度?
我发现了非常酷的“HUD”进度指示器类,但我不希望进度指示出现在所选项目列表的顶部。相反,我希望用户能够感知到他们已经“去了”一个等待填充的新空间。
我对这些东西还很陌生,所以我希望我至少已经连贯地表达了这个问题。感谢任何人都可以提供的任何帮助。
【问题讨论】:
-
我找到了解决方案,但我不知道这是否是“最佳”(甚至合理)的做法,所以我想保留这个问题。为了替换我的“加载”控制器,我从导航控制器获取整个视图控制器堆栈,removeLastObject 以摆脱“加载”控制器,使用新的特定类型的 addObject,然后将 setViewControllers 设置为更新的堆栈。这看起来合适吗,还是我错过了更优雅的方法?
标签: iphone uiviewcontroller uinavigationcontroller