正如Apple Doc所说,
重新加载行会导致表视图向其数据源询问新内容 该行的单元格。
我将UITableView与NSFetchedResultsController结合使用:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
if (self.tableView.isEditing)
{
[self.tableView setEditing:NO animated:YES];
}
[self.tableView beginUpdates];
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
[self updateTabItemBadge];
[self.noDataView setHidden:![self isNoData]];
WXINFO(@"controllerDidChangeContent");
}
在上述两个函数之间,我重新加载目标单元格:
case NSFetchedResultsChangeUpdate: {
if (indexPath) {
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
我在第1563行设置断点,检查是否已调用reloadRowsAtIndexPaths
,但在此之后,- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
未被调用。
所以,我的手机无法更新。
有人可以告诉我为什么?感谢。
答案 0 :(得分:1)
包装:
[tableView beginUpdates];
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[tableView endUpdates];
答案 1 :(得分:0)
请您使用[tableView reloadData]重新加载tableview进行检查吗?
如果只想更新一行而不重新加载表,请检查'indexPath'类型。它应该是NSIndexPath。
答案 2 :(得分:0)
我发现这样做的唯一可靠方法是使用除非之外的动画。如果指定了任何其他动画,则重新加载正确。
答案 3 :(得分:0)
这是我做过的一项工作,但它完成了这项工作。
func tableView(_ tableView: UITableView, commit editingStyle:
UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
if itemDetailDict.count - 1 <= 0 {
self.mainTable.beginUpdates()
let cellOne = self.mainTable.cellForRow(at: indexPath)
cellOne?.textLabel?.text = "There are no items."
self.mainTable.reloadRows(at: [indexPath], with: .automatic)
self.mainTable.endUpdates()
} else {
self.mainTable.beginUpdates()
let removeKey = Array(itemDetailDict.keys)[indexPath.row]
itemDetailDict.removeValue(forKey: removeKey)
mainTable.deleteRows(at: [indexPath], with: .automatic)
self.mainTable.endUpdates()
}
}
}
基本上在删除行功能上我希望用户能够删除该行,但是当只剩下一行时,我想在tableview的单元格中显示默认消息。
为此,我更新了数据源,当字典中没有更多数据时,我更新了单元格以显示文本,重新加载单元格,然后在我的tableview上调用endUpdating。
我希望这会有所帮助。