UITableView侧滑cell显示删除按钮后点击编辑出现状态不一致问题
问题根因
- 当侧滑UITableViewCell显示删除按钮时,UITableView会临时进入单行编辑模式,此时
tableView.isEditing取值为true,但ViewController自身的isEditing属性仍为false,两者状态不同步。 - 你当前的
setEditing方法实现逻辑错误:系统调用该方法时传入的editing参数就是需要切换到的目标状态,无需手动对当前状态取反,这直接导致了状态翻转错乱。
修复方案
步骤1:修正setEditing方法实现
直接使用系统传入的目标状态参数,保证ViewController和UITableView的编辑状态完全同步:
override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) // 先复位可能存在的单行侧滑状态 if let swipeEditIndexPath = tableView.indexPathForSelectedRow { tableView.deselectRow(at: swipeEditIndexPath, animated: animated) } tableView.setEditing(editing, animated: animated) }
步骤2:可选增强(侧滑取消后同步状态)
如果需要在用户侧滑显示删除按钮、又手动滑回取消后,保证状态完全一致,可以实现UITableViewDelegate的编辑结束回调:
func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) { // 单行侧滑编辑结束后同步VC状态为非编辑 super.setEditing(false, animated: true) }
修复后逻辑验证
侧滑Cell显示删除按钮后点击编辑按钮,系统会传入editing = true的目标状态,直接将UITableView设置为全局编辑模式,不会再出现状态翻转的问题。
内容的提问来源于stack exchange,提问作者Nuri
相关产品推荐
相关产品推荐

