gpt4 book ai didi

ios - 为后续 View 显示预加载数据的模式

转载 作者:可可西里 更新时间:2023-11-01 05:13:23 24 4
gpt4 key购买 nike

非常简单的用例:假设一个 iOS 应用程序显示一个包含电影列表的 MovieListController View (在 UINavigationController 内部)。当用户触摸一个时,应用程序将 MovieDetailController 推送到导航堆栈(即 [[MovieDetailController alloc] initWithMovieId:(NSString *)。在 MovieDetailController viewDidAppear: 方法,它进行 HTTP 调用以根据传递给它的电影 ID 检索详细信息。

挑战在于 MovieDetailController 会立即被推送到导航堆栈,并且在没有检索到详细信息的一两秒钟内, View 会显示一堆空白字段,这是不受欢迎的。

为了解决这个问题,我正在考虑让 MovieListController 不立即将 MovieDetailController 压入堆栈。相反,它会显示一个进度指示器(我正在使用 SVProgressHUD),然后调用 MovieDetailControllerinitWithMovieId: 方法,该方法将启动 HTTP 调用。然后当接收到数据时,MovieDetailController 会回调到 MovieListController 以移除进度指示器,然后将 MovieDetailController 推送到导航上堆。

这种情况有更好的模式吗?我是否应该考虑让 MovieDetailController 在准备就绪时将自己推送到导航堆栈?

注意:我考虑过加载详细 View 并放置一个事件指示器,但您仍然可以在它后面看到一个看起来有点奇怪的“空 View ”。我还考虑过让 MovieListController 自己检索详细信息,但这似乎破坏了封装模型 - MovieListController 应该只关心列出电影,而不是它们的详细信息。

有什么想法吗?这部电影只是一个例子 - 在这里寻找一般模式。

最佳答案

我个人会采用以下方法。

  1. 用户选择他们想要详细信息的电影
  2. 推送到详细 View ,而不是用空字段显示骨架 View ,覆盖加载 View ,您可以继续在其上使用进度 HUD 来获得由此获得的任何动画。
  3. 一旦结果下来,移除你的 HUD 和隐藏所有数据/字段的加载覆盖 View

我选择这条路线而不是在推送 View Controller 之前显示 HUD 的原因是您可以让用户有机会取消他们的选择。我不熟悉 SVProgressHUD 但希望当显示 HUD 时您可以启用触摸,特别是当用户不小心选择了电影或请求只是花费了比他们愿意等待的时间更长的时间。

它还将逻辑与您的 ListView 分开,您的详细 View 是独立的,可以在您应用的任何地方初始化(也许您想在电影详细 View 中交叉链接相似的电影)并且您不需要重写逻辑等待结果返回的呈现 View 。

关于ios - 为后续 View 显示预加载数据的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com