gpt4 book ai didi

ios - 如何根据 TableView 行删除更改导航栏按钮项目状态

转载 作者:行者123 更新时间:2023-11-30 11:38:14 25 4
gpt4 key购买 nike

在我的导航栏中,我有一个 rightBarButtonItem ,它需要根据 tableView 行删除更改标题。

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

其中 editItem 有两个标题,如下 EditDone

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()
}
})

}

}

因此 editAction 为我更改标题和 tableView 编辑模式:

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 是 bool 值,用于在何时或何时不更改编辑模式时保持状态。

但问题是,当我从右向左滑动行时,它会显示删除按钮,同时我想通过按导航栏的完成按钮来关闭编辑,而不是删除它,这不会更改标题如行

self.setEditing(editMode, animated: true) 

调用以下方法两次并最终撤消标题更改:

tableView(_ tableView: UITableView, didEndEditingRowAt indexPath: IndexPath?) 

那么我应该如何实现它,这样我就不会遇到这种情况。

最佳答案

好吧,我已经成功了。我做了一些调整来实现它。

在方法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)
}

关于ios - 如何根据 TableView 行删除更改导航栏按钮项目状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49509537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com