在我的iOS5应用程序中,我有UITableView,它将根据存储在progressLabelArray中的NSString值显示单元格。我已经从我的较低层注册了一个回调,我在一个C函数中接收它们,我通过引用自己调用UI更新方法。
static void callback_handler(int nCode) {
[refToSelf updateProgressView:nCode];
}
-(void) updateProgressView:(int32_t) nCode
{
NSString *status = nil;
status = [self progressUpdateToString:nCode];
[self.progressLabelArray insertObject:status atIndex:0];
[self.progressTableView reloadData];
[self.progressTableView setNeedsDisplay];
}
我想,由于回调来自同一个(UI线程),因此可能不需要performSelectorOnMainThread。
我的问题是,只有在整个操作完成后才会刷新表视图,显示最后一个回调值。有没有办法在每次回调后强制UI刷新?回调可能会相对较快。
答案 0 :(得分:0)
通过在单独的线程中运行进度代码解决了该问题。回调来自一个单独的线程,在那里我更新我的主线程(UI线程)。我猜UI线程没有得到更新UI的任何周期。
答案 1 :(得分:0)
点亮你的
tableView.reloadData()
在以下块中调用,您的tableview将刷新而不会出现任何问题,也不会像实时应用程序那样刷新滚动条。
对于swift 3:
DispatchQueue.main.async()
{
tableView.reloadData()
}
对于目标C:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Background work
[tableView reloadData];
});