使用 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];
});
});
}
我在一个视图中有一个表视图,其中列出了将要执行的所有步骤。我想在执行步骤时显示标记的步骤。我面临的问题是,在过程执行完所有步骤之前,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];
});
});
}