重新加載發生在下一個佈局過程中,這通常發生在將控制權返回到運行循環(在您的按鈕操作或任何返回之後)之後。
所以運行表視圖重裝後的東西的一種方式是簡單地強制表視圖立即進行佈局:
- (void)reloadTableView
{
NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];
[self.tableView reloadData];
[self.tableView layoutIfNeeded];
for (NSIndexPath *path in indexPaths) {
[self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
或者就像你說的,你可以使用GCD來安排你的後佈局代碼後來運行
- (void)reloadTableView
{
NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];
[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
for (NSIndexPath *path in indexPaths) {
[self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
}
只是得到一個布爾標誌並存儲前一行索引,並且在重載表格視圖時比checkfor cellforrowatindexpath檢查行並檢查布爾標誌,並且如果它被選中,而不是做任何你想做的事並設置'[cell setSelected: YES]'和其他'[cell setSelected:NO]' –