当单元格处于编辑模式时,我们重新加载表格视图。有没有办法让特定的单元格保持编辑模式显示“删除”按钮。
提前致谢
答案 0 :(得分:4)
维护选定项目的数组。取消选择行时,不要忘记删除该项目。
class ViewController: UIViewController {
var selectedData = [IndexPath]()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.selectedData.append(indexPath)
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath){
self.selectedData.removeAll(where: {$0 == indexPath})
}
在编辑模式下重新加载表视图行,并以编程方式重新选择行。
self.tableView.beginUpdates()
self.tableView.reloadRows(at: selectedData, with: .automatic)
self.tableView.endUpdates()
for item in selectedData {
self.tableView.selectRow(at: item, animated: false, scrollPosition: .none)
}
示例代码 Gist
答案 1 :(得分:1)
您应该跟踪进入编辑模式的单元格。
您可以在表视图委托方法- tableView:willBeginEditingRowAtIndexPath:
中执行此操作。我建议在NSMutableSet中存储当前处于编辑模式的单元格的所有索引路径。
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
[self.editingCellIndexPaths addObject:indexPath];
}
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath {
[self.editingCellIndexPaths removeObject:indexPath];
}
然而,在重新加载时,您的数据源会询问单元格。在那里,您可以在处于编辑模式的单元格上调用- setEditing:animated:
方法
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = //here you get cell
/*
cell configure code here
*/
if ([editingCellIndexPaths containsObject:indexPath]) {
[cell setEditing:YES animated:NO];
}
return cell;
}
希望有所帮助
答案 2 :(得分:0)
进入编辑模式时,您是否可以确认是否需要致电reloadData
?通常,在表格视图出现之前,不必重新加载表格的数据。这是因为您提交给模型的任何更改都应该已在视图中显示,因为用户在保存数据之前进行了更改。
如果您需要处理输入的某些数据,导致保存的版本与输入的版本不同,那么我建议您在保存数据之前在输入视图中显示已处理的版本。这样,您仍然不需要重新加载数据,因为视图已经与提交的版本同步。