我有一个表视图控制器,我希望用户能够删除一个项目,所以我实现了这一点:
override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return .delete
}
override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
return false
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete) {
self.array.remove(at: indexPath.row)
tableView.reloadData()
}
}
我的问题是,如何隐藏删除按钮,仅在用户滑动行时显示它?
这是它的外观,是否可以启用排序?
答案 0 :(得分:0)
尝试使用此功能代替您尝试过的三个功能:
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (action, indexPath) in
self.array.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
return [deleteAction]
}
编辑:
看到您的屏幕截图后,我相信这就是您要实现的目标。您试图在按下editButton
时启用删除功能,然后出现删除图标。如果是这样,请尝试以下代码。
class TableViewController: UITableViewController {
var array = [1,2,3]
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
navigationItem.rightBarButtonItem = editButtonItem
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
tableView.setEditing(editing, animated: true)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "\(array[indexPath.row])"
return cell
}
override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
return false
}
override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return .delete
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
//deleting logic
}
}
否则,您可以考虑仅实现一张幻灯片以删除动画,并且代码是在 EDIT 之前的代码。