当UITableViewCell处于编辑模式并重新加载UITableView时,如何在重新加载后将该特定单元保持在编辑模式

时间:2015-06-23 09:26:20

标签: ios objective-c iphone uitableview

当单元格处于编辑模式时,我们重新加载表格视图。有没有办法让特定的单元格保持编辑模式显示“删除”按钮。

提前致谢

3 个答案:

答案 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?通常,在表格视图出现之前,不必重新加载表格的数据。这是因为您提交给模型的任何更改都应该已在视图中显示,因为用户在保存数据之前进行了更改。

如果您需要处理输入的某些数据,导致保存的版本与输入的版本不同,那么我建议您在保存数据之前在输入视图中显示已处理的版本。这样,您仍然不需要重新加载数据,因为视图已经与提交的版本同步。