繁体   English   中英

如何根据TableView行删除来更改导航栏按钮项的状态

[英]How do i change the navigation bar button item state according to tableview row delete

在我的导航栏中,我有一个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是布尔值,用于在何时或何时不更改编辑模式时保持状态。

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

self.setEditing(editMode, animated: true) 

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

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

因此,我应该如何实现这种方式以免遇到这种情况。

好吧,我已经做到了。 我已经做了一些调整以实现它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM