如何修改UITableView中特定单元格的editingStyle编辑样式
UITableView 部分单元格禁用滑动删除的正确实现方案
直接修改 UITableViewCell 的 editingStyle 属性不生效,是因为 UITableView 会优先读取数据源协议中 tableView(_:editingStyleForRowAt:) 方法的返回值,动态覆盖 cell 自身的该属性配置。你可以按以下步骤实现需求:
- 第一步:在数据源逻辑中提前标记需要禁用删除的行,比如维护一个存储禁用删除行的 IndexPath 数组,或者根据数据模型的自定义字段判断(比如数据的
canDelete属性为 false 时禁用删除) - 第二步:实现 UITableViewDataSource 的
tableView(_:editingStyleForRowAt:)方法,按行判断返回对应的编辑样式,示例代码如下:
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { // 替换为你自己的判断逻辑,比如判断indexPath是否在禁用列表中 let currentData = dataSourceArray[indexPath.row] if !currentData.canDelete { return .none } // 其余行返回默认的删除样式 return .delete }
如果仅设置 editingStyle 为 .none 后仍有异常的滑动手势响应,可以额外实现
tableView(_:canEditRowAt:)方法彻底禁止对应行进入编辑状态:
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { let currentData = dataSourceArray[indexPath.row] return currentData.canDelete }
- 注意事项:不需要修改 cell 本身的 editingStyle 属性,所有编辑样式控制统一走数据源方法即可;OC 实现逻辑完全一致,对应方法为
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
内容的提问来源于stack exchange,提问作者user15748784
相关产品推荐
相关产品推荐

