在我的导航栏中,我有alert("this is an alert !")
,需要根据rightBarButtonItem
行删除更改标题。
tableView
其中editItem有两个标题,如下所示修改和完成
<{1>} 下的
editItem = UIBarButtonItem(title: Strings.CallHistory.edit, style: .plain, target: Selector, action: Selector{ [weak self] _ in
self?.editAction()
})
self.navigationItem.rightBarButtonItem = self.viewModel.history.count == 0 ? nil : editItem
所以editAction为我做了标题更改和tableView编辑模式:
tableViewDelegates
其中override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
override func tableView(_ tableView: UITableView, willBeginEditingRowAt indexPath: IndexPath) {
self.editAction()
}
override func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
self.editAction()
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
viewModel.deleteFromHistory(indexPath: indexPath, completion: { [weak self] in
self?.viewModel.history.remove(at: indexPath.row)
self?.tableView.deleteRows(at: [indexPath], with: .fade)
if self?.viewModel.history.count == 0 {
self?.editAction()
self?.setBackgroundView()
}
})
}
}
是布尔值,用于在不更改编辑模式时保持状态。
但问题是,当我从右向左滑动我的行时,它显示删除按钮,同时我想通过按导航栏的完成按钮关闭编辑,而不是删除它不会更改标题作为行
func editAction() {
self.editMode = !editMode
self.setEditing(editMode, animated: true)
changeNavBarStatus()
}
func changeNavBarStatus() {
if self.viewModel.getCount() != 0 {
navigationItem.rightBarButtonItem?.title = editMode ? Strings.CallHistory.done : Strings.CallHistory.edit
navigationItem.leftBarButtonItem = editMode ? self.clearItem : nil
}
else {
navigationItem.rightBarButtonItem = nil
navigationItem.leftBarButtonItem = nil
}
}
调用以下方法两次,最终撤消标题更改:
editMode
那么我应该如何实现它,以至于我不会面对这种情况。
答案 0 :(得分:0)
我已经成功了。我做了一些调整来完成它。
方法didEndEditingRowAt
:
override func tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) {
self.setEditing(editMode, animated: true)
}
将editMode
计算属性设置为实现didSet
:
var editMode: Bool = false {
didSet {
changeNavBarStatus()
}
}
在editAction
下:
func editAction() {
self.editMode = !editMode
self.setEditing(editMode, animated: true)
}