我有一个表格视图单元格,在单击它时,将打开另一个表格视图,您可以选择一些内容作为表格视图单元格的值。这里的问题是第二个表视图中的数据很大,加载需要很长时间。因此,在我单击单元格后,屏幕将冻结在那里,这对用户不友好。我想在加载第二个表格视图期间显示进度条。但是我找不到添加它的好地方。我想知道应该以哪种方法添加代码来显示进度条。
3 回答
在 UITableViewCell 附件视图中显示 UIActivityIndicator(此处为示例图像)怎么样?
你可以用一些代码放置它......
- (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。要开始使用,请访问本教程。您可以跳过前半部分并专注于实际的线程块。API是dispatch_queue_create
和。dispatch_async
dispatch_release
这不会形成进度条。但是,它会解锁您的 UI。然后你可以考虑制作进度条的方法。使用内置动画或一些自定义动画。甚至可以通过后台任务在第一个表视图中预加载数据。