每次回调时刷新/重新加载UITableView

时间:2012-02-07 11:23:18

标签: iphone objective-c uitableview ios5

在我的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刷新?回调可能会相对较快。

2 个答案:

答案 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];

});