区分UITableViewCell的全局编辑模式与单行删除模式
解决方案:区分全局编辑与单行滑动删除状态
不需要给单元格持有UITableViewController的弱引用,直接利用单元格自带的tableView属性就能判断当前是全局编辑还是单行滑动删除场景。
核心思路
全局编辑模式下,整个UITableView的isEditing属性会被设为true;而单行滑动删除时,只有当前单元格进入编辑状态,UITableView本身的isEditing仍为false。基于这个差异,在单元格的setEditing方法里做判断即可。
修改后的单元格代码示例
override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) // 判断是否处于全局编辑模式 let isGlobalEditing = tableView?.isEditing == true && editing // 仅在全局编辑时隐藏指定内容 yourHiddenView.isHidden = isGlobalEditing }
逻辑说明
- 点击全局编辑按钮时,控制器会调用
setEditing(true, animated: true),此时tableView.isEditing变为true,所有单元格的setEditing被触发,isGlobalEditing为true,执行内容隐藏逻辑。 - 用户滑动单行触发删除时,
tableView.isEditing保持false,仅当前单元格的editing变为true,isGlobalEditing为false,不会隐藏任何内容。
额外补充
如果你的单元格在全局编辑模式下还有其他操作(比如显示排序控件),也可以基于isGlobalEditing的结果来控制,逻辑保持一致即可。
内容的提问来源于stack exchange,提问作者Martin Perry
相关产品推荐
相关产品推荐

