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

时间:2018-03-27 09:44:58

标签: ios swift uitableview

在我的导航栏中,我有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

那么我应该如何实现它,以至于我不会面对这种情况。

1 个答案:

答案 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)
    }