You need to enable JavaScript to run this app. 如何修改UITableView中特定单元格的editingStyle编辑样式
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 22:42:03