UITableView 禁用滑动以快速删除特定单元格
Posted
技术标签:
【中文标题】UITableView 禁用滑动以快速删除特定单元格【英文标题】:UITableView disable swipe to delete for particular cells swift 【发布时间】:2018-03-02 06:08:43 【问题描述】:我正在尝试禁用滑动以删除表格视图中某些特定单元格的操作。但我无法迅速找到一个好的解决方案。覆盖“tableView.isEditing = true”方法时,我不希望单元格上的左侧减号。这是我的代码。下面的代码没有禁止滑动到 statusId 为“12”的单元格。希望你能理解我的问题。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as! TableViewDateCell
cell.titleStatus.text = mainList[indexPath.row].statusName
//tableView.isEditing = true
//disable swipe to delete for cell with statusId == "12"
if mainList[indexPath.row].statusId == "12"
//tableView.isEditing = false
cell.selectionStyle = UITableViewCellSelectionStyle.gray
cell.isUserInteractionEnabled = false
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
【问题讨论】:
【参考方案1】:您可以自定义UITableViewDelegate
的函数editingStyleForRowAt
,尤其是在您不需要滑动时返回UITableViewCellEditingStyle.none
,例如:
public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle
if mainList[indexPath.row].statusId == "12"
return UITableViewCellEditingStyle.none
else
return UITableViewCellEditingStyle.delete
【讨论】:
【参考方案2】:使用这个表视图委托方法
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
Documentation tableView:canEditRowAtIndexPath:
【讨论】:
【参考方案3】:感谢您发布此问题和上述答案。
在扩展答案时,我有一个不应该被删除的默认行,所以我在那个特定的单元格上设置了一个标签,然后首先使用了这个方法。
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
if tableView.cellForRow(at: indexPath)?.tag == 100
return false
return true
但是 - 这导致调试器中出现以下警告 -
尝试在表格视图上调用 -cellForRowAtIndexPath: 而它 正在更新其可见单元格,这不是 允许。
所以,正如其他评论员所说,使用下面的这种方法:
Swift 5.0
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle
if tableView.cellForRow(at: indexPath)?.tag == 100
return UITableViewCell.EditingStyle.none
else
return UITableViewCell.EditingStyle.delete
【讨论】:
太棒了!我面临着相同的错误表视图更新,但现在editingStyleForRowAt 效果很好。谢谢!【参考方案4】:我在编辑 myTableview 时试图禁用/启用删除功能。 这是我的解决方案:
public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle
if !myTableView.isEditing
return UITableViewCell.EditingStyle.none
else
return UITableViewCell.EditingStyle.delete
【讨论】:
【参考方案5】:viewDidLoad 中的 Swift 4.2 只需将您的表值设置为...
myTableView.isEditing = false
【讨论】:
以上是关于UITableView 禁用滑动以快速删除特定单元格的主要内容,如果未能解决你的问题,请参考以下文章
在 iphone sdk 中一起滑动以删除和移动 UItableView 选项中的单元格
iOS 7 UITableView 问题 - 当我们已经有一个单元格时尝试设置滑动以删除单元格
当用户没有完全滑动以删除表格视图单元格时,如何禁用/启用编辑按钮?