【发布时间】:2012-04-15 15:09:14
【问题描述】:
我有一个表格视图单元格,在单击它时,另一个表格视图将打开,您可以选择一些内容作为表格视图单元格的值。这里的问题是第二个表视图中的数据很大,加载需要很长时间。因此,在我单击单元格后,屏幕将冻结在那里,这对用户不友好。我想在加载第二个表格视图期间显示进度条。但是我找不到添加它的好地方。我想知道我应该在哪种方法中添加代码来显示进度条。
【问题讨论】:
标签: ios progress-bar loadview
我有一个表格视图单元格,在单击它时,另一个表格视图将打开,您可以选择一些内容作为表格视图单元格的值。这里的问题是第二个表视图中的数据很大,加载需要很长时间。因此,在我单击单元格后,屏幕将冻结在那里,这对用户不友好。我想在加载第二个表格视图期间显示进度条。但是我找不到添加它的好地方。我想知道我应该在哪种方法中添加代码来显示进度条。
【问题讨论】:
标签: ios progress-bar loadview
在 UITableViewCell 附件视图中显示 UIActivityIndicator (sample image here) 怎么样?
你可以用一些代码来放置它...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
}
您也可以通过调用在后台线程中进行长时间计算
[self performSelectorInBackground:@selector(yourLongTakingMethod) withObject:nil];
【讨论】:
两件事:
我会认真考虑一个不同的选项而不是进度条,例如尝试MBProgressHUD 之类的东西,它看起来更好,并且适合您的目的。
为了实现这一点,您必须确保您的 UI 线程没有被卡住(因此应用程序不会“冻结”)——这意味着在后台线程上调用加载过程。启动加载过程的方法应该启动进度指示器,处理显示加载数据的方法(一旦准备好)应该删除它。祝你好运!
【讨论】:
如果您的应用程序冻结,这意味着您正在阻塞 UIThread,就像 @stavash 建议的那样。进度条只是一个动画图像,它不会解决您的问题。您要做的是将“数据准备代码”放入线程中。最简单的方法是使用 Grand Central Dispatch。要开始使用,请访问this tutorial。您可以跳过前半部分并专注于实际的线程块。 API 是dispatch_queue_create、dispatch_async 和dispatch_release。
这不会产生进度条。但是,它会解锁您的 UI。然后你可以考虑制作进度条的方法。使用内置动画或一些自定义动画。甚至可以通过后台任务在第一个 tableview 中预加载数据。
【讨论】: