我有一个 UINavigationController 将自定义 UITableViewController 推送到堆栈上。这个推送的视图控制器,也是表视图委托和数据源,然后需要从互联网下载所需的数据才能显示。当用户滚动到表格视图的底部时,也会发生这种下载过程,其中新下载的数据会附加到表格视图的底部。
我想通知用户此下载正在进行。问题是我尝试了很多方法,但表格视图没有显示我在下载之前所做的任何更改。我已将通知和下载封装到自定义 UITableViewController 类中的单个方法中:
- (void) extractArticlesFromURL:(NSURL) url
{
// 1st method - set alpha
self.tableView.alpha = 0.2;
// 2nd method - push an overlay while downloading
UIViewController* overlay = [[UIViewController alloc] init];
overlay.view.backgroundColor = [UIColor blackColor];
[self.navigationController pushViewController:overlay animated:NO];
// 3rd method - introduce a BOOL isLoading, which is used in data source
// and delegate methods in an attempt to change display
isLoading = YES;
[self.tableView reloadData];
[self.tableView setNeedsDisplay];
// Spend a few seconds downloading data which is stored in an
// array which is accessed during UITableViewDelegate method calls...
self.tableView.alpha = 1;
isLoading = NO;
[self.navigationController popViewControllerAnimated:NO];
[self.tableView reloadData];
}
我将这个特殊的方法称为 in -(void)scrollViewDidScroll: (UIScrollView*)scrollView
,这肯定会被调用,因为表格视图附加了新数据,但在下载过程中显示没有变化。我不介意应用程序冻结,只是它在冻结之前没有更新显示。
如果有帮助,我将使用 XCode 4.3.2 和 LLVM 3.1,并使用 iPhone Simulator 5.1 测试功能。应用程序的这个组件是单线程的。