通过在 tableView 中滑动单元格发出编辑模式
Issue Editing Mode by swiped cell in tableView
我有以下问题。如果我只滑动单元格直到删除按钮可见,然后单击编辑,table 未处于编辑模式但按钮显示它。
我已经看到方法 shouldBeginEditingAtRow
和 didEndEditingAtRow
如果我先滑动一行直到删除按钮然后再滑动下一行,tableView.isEditing
是 true
。
这意味着如果我滑动一行直到删除按钮可见,然后单击编辑,setEditing
会将 tableView 的状态设置为 false
。
我已经尝试在 didEndEditingAtRow
method.But 中将状态设置为 false,不幸的是这没有用。你有什么建议或解决方案吗?
我的代码:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var data = [1,2,3,4,5,6,7,8,9]
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(!isEditing, animated: true)
tableView.setEditing(!tableView.isEditing, animated: true)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = String(data[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
data.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView.dataSource = self
tableView.delegate = self
navigationItem.rightBarButtonItem = editButtonItem
}
}
首先,每当您重写 UIKit 方法时,请尝试从您重写的方法中传递参数因此使用以下行更新 setEditing 方法:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
//handle Animation
if editing {
self.tableView.reloadSections(IndexSet(integersIn: 0...0), with: .none)
}
tableView.setEditing(editing, animated: true)
}
我有以下问题。如果我只滑动单元格直到删除按钮可见,然后单击编辑,table 未处于编辑模式但按钮显示它。
我已经看到方法 shouldBeginEditingAtRow
和 didEndEditingAtRow
如果我先滑动一行直到删除按钮然后再滑动下一行,tableView.isEditing
是 true
。
这意味着如果我滑动一行直到删除按钮可见,然后单击编辑,setEditing
会将 tableView 的状态设置为 false
。
我已经尝试在 didEndEditingAtRow
method.But 中将状态设置为 false,不幸的是这没有用。你有什么建议或解决方案吗?
我的代码:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var data = [1,2,3,4,5,6,7,8,9]
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(!isEditing, animated: true)
tableView.setEditing(!tableView.isEditing, animated: true)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = String(data[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
data.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .automatic)
}
}
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView.dataSource = self
tableView.delegate = self
navigationItem.rightBarButtonItem = editButtonItem
}
}
首先,每当您重写 UIKit 方法时,请尝试从您重写的方法中传递参数因此使用以下行更新 setEditing 方法:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
//handle Animation
if editing {
self.tableView.reloadSections(IndexSet(integersIn: 0...0), with: .none)
}
tableView.setEditing(editing, animated: true)
}