![](/img/trans.png)
[英]How do I change the width of the navigation bar item (specifically a button) in Xcode?
[英]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具有两个标题,如下所示: Edit和Done
在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.