Tableview重新加载setNeedsDisplay不起作用

时间:2015-05-29 17:39:50

标签: ios objective-c uitableview setneedsdisplay

我在视图中有一个tableview,列出了将要执行的所有步骤。我想在步骤执行时显示标记的步骤。我面临的问题是,在程序执行所有步骤之前,tableview不会刷新。因此,所有步骤都显示为同时标记。

这是我的功能,当用户按下按钮时开始运行:

-(void)Initialiseer {
    //do something for the first step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];

    //do something for the second step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];

    //do something for the third step
    [self.MyTableView reloadData];
    [self.MyView setNeedsDisplay];
}

MyView是IBOutlet的视图。 MyTableView是tableview IBOutlet。我也试过[self.view setNeedsDisplay]和[self。 MyTableView setNeedsDisplay]但这也不起作用。我也尝试从tableview获取单元格并对单元格进行更改。在程序完全执行完毕之前,没有任何内容会刷新......

有人能告诉我我做错了什么吗?我是iOS开发的新手,我搜索,阅读,尝试过...但到目前为止还没有找到答案。

1 个答案:

答案 0 :(得分:0)

我认为你需要阅读运行循环和setNeedsDisplay(我不认为你做的是什么)。基本上,在代码完成执行之前,UI不会更新。显示复杂计算所需的模式如下:

-(void)Initialiseer {
  dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
    //do something for the first step

    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });

    //do something for the second step
    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });

    //do something for the third step
    dispatch_sync(dispatch_get_main_queue(), ^{
      [self.MyTableView reloadData];
    });
  });
}