Swift:如何使用编辑按钮删除并停用滑动删除?
Posted
技术标签:
【中文标题】Swift:如何使用编辑按钮删除并停用滑动删除?【英文标题】:Swift: How to delete with Edit button and deactivate swipe to delete? 【发布时间】:2015-04-16 10:58:31 【问题描述】:我在导航栏中添加了一个带有 IBAction 的编辑按钮:
@IBOutlet weak var editButton: UIBarButtonItem!
@IBAction func doEdit(sender: AnyObject)
if (self.tableView.editing)
editButton.title = "Edit"
self.tableView.setEditing(false, animated: true)
else
editButton.title = "Done"
self.tableView.setEditing(true, animated: true)
为了删除我有的单元格
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == UITableViewCellEditingStyle.Delete)
arr.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
不幸的是,这也会激活滑动删除。如何在不执行滑动删除的情况下删除单元格?
【问题讨论】:
UITableView disable swipe to delete, but still have delete in Edit mode? 的可能重复项 谢谢,但不幸的是,链接的主题是关于 Objective-C 而不是 Swift。 Objective-C 和 Swift 都使用相同的运行时和框架。两者都使用 Cocoa(或 ios 中的 Cocoa Touch)。您的问题更多是关于我如何使用 UITableView?(Cocoa 概念)而不是 Swift(语言)问题。 【参考方案1】:解决方案(来自this answer),翻译成Swift:
override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle
if (self.tableView.editing)
return UITableViewCellEditingStyle.Delete;
return UITableViewCellEditingStyle.None;
【讨论】:
谢谢,但 Xcode 告诉我Method does not override any method from its superclass
。当我删除override
时,该错误消失了。当单击删除按钮时,没有任何反应。某处不需要tableView.deleteRowsAtIndexPaths
方法吗?
如果您从 UITableViewController 扩展,则需要覆盖。如果您使用的是常规 UIViewController,则不需要 override
(该类没有此方法,因此您无法覆盖它)
您是否为 TableView 设置了委托和数据源?您也可以发布此 ViewController 中的所有代码吗?【参考方案2】:
这是工作代码:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if (editingStyle == UITableViewCellEditingStyle.Delete)
arr.removeAtIndex(indexPath.row)
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle
if (self.tableView.editing)
return UITableViewCellEditingStyle.Delete
return UITableViewCellEditingStyle.None
【讨论】:
在 Swift-4 表格视图编辑委托方法改变【参考方案3】:Swift-4
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
let delete = UITableViewRowAction(style: .destructive, title: "delete") (action, indexPath) in
// delete item at indexPath
let action2 = UITableViewRowAction(style: .normal, title: "action2") (action, indexPath) in
// action2 item at indexPath
return [delete, action2]
【讨论】:
以上是关于Swift:如何使用编辑按钮删除并停用滑动删除?的主要内容,如果未能解决你的问题,请参考以下文章
一旦按下滑动删除按钮,删除功能(提交编辑样式功能)会导致应用程序崩溃