使用 setNeedsDisplay 重新加载 Tableview 不工作

Tableview reload with setNeedsDisplay not working

我在一个视图中有一个表视图,其中列出了将要执行的所有步骤。我想在执行步骤时显示标记的步骤。我面临的问题是,在过程执行完所有步骤之前,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 是表视图 IBOutlet。我还尝试了 [self.view setNeedsDisplay] 和 [self. MyTableView setNeedsDisplay] 但这也不起作用。我还尝试从 tableview 获取单元格并对单元格本身进行更改。在过程完全执行完毕之前,不会刷新任何内容...

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

我认为您需要仔细阅读 运行 循环和 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];
    });
  });
}