1

当用户滚动到 UITableView 的底部时,我试图让 UIActivityIndi​​catorView “出现并设置动画”……。

到达表格视图的底部后,会发出一个需要几秒钟才能完成的网络请求,然后 UIActivityIndi​​catorView 应该“停止并隐藏”

我正在使用 tableView:willDisplayCell:forRowAtIndexPath 触发 UIActivityIndi​​catorView 的外观:

项目清单

但问题是 UIActivityIndi​​catorView 直到整个方法(即 tableView:willDisplayCell:forRowAtIndexPath:) 被调用后才会出现在 iPhone 屏幕上,到那时它也已经被隐藏了。

关于如何:

  1. 显示指标视图
  2. 发出网络请求
  3. 隐藏指标视图?

新线程?更好的方法?

谢谢!!

具体来说,我的功能看起来像这样

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.results && indexPath.row == [self.results count] - 1) {
        [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
        [self.loadingSignal startAnimating];

    /// make web request that will take a few seconds

        [self.loadingSignal setHidden:YES];
        [self.loadingSignal stopAnimating];

        }
    }
}
4

2 回答 2

1

好的。从您上面的代码片段中,我看到了一些问题:

  1. 您似乎计划在显示单元格之前等待请求完成。这有一些负面影响:这对用户来说很烦人,并且很可能会在请求发出时冻结 UI(这可能需要几秒钟)。
  2. 一切都发生在willDisplayCell方法中。

以下是我认为你应该如何解决这个问题:

  1. 有将显示异步加载的单元格触发器。
  2. 显示一个带有微调器的单元格,上面写着“正在加载...”(请参阅​​ Tweetie 2 获取灵感)
  3. 等待您的请求回电
  4. 使用响应填充您的模型
  5. 删除“正在加载...”单元格
  6. 强制重新加载您的数据[tableView reloadData]

这应该可以让你实现你想做的事情。

于 2009-12-08T19:07:23.420 回答
1

您可以尝试在UITableView的cellForRowAtIndexPath:方法中这样做

于 2009-12-08T19:07:51.043 回答