cellForRowAtIndexPath不会在reloadRowsAtIndexPaths之后调用
正如苹果文件所说,
重新加载行会导致表视图询问其数据源为该行的新单元格。
我将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]; }
我在Line1563设置了一个断点来检查reloadRowsAtIndexPaths
是否被调用,但是在这之后, - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
没有被调用。
所以,我的手机无法更新。
有人可以告诉我为什么? 谢谢。
你可以请检查通过重新加载tableview使用[tableView reloadData]?
如果只希望更新一行而不重新载入表格,请检查'indexPath'types。 它应该是NSIndexPath。
包裹在:
[tableView beginUpdates]; [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; [tableView endUpdates];
我发现这样做的唯一可靠的方法是使用非none的animation。 如果指定了其他animation,则重新加载正确。
这是围绕我做的一个工作,但它做的工作。
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。
我希望这有帮助。