标题基本上说明了一切。
我有一个UITableView
,我希望RightBarButtonItem
项在UITableView
处于编辑模式时消失。不幸的是,到目前为止我发现的所有答案都建议将按钮设置为nil ...这对我不起作用,因为我不想摆脱按钮和对它的引用,只需隐藏它UITableView
处于编辑模式。
我无法确定要做什么,然后是:
UITableView
何时进入编辑模式RightBarButtonItem
(不完全删除)UITableView
何时离开编辑模式(因此按钮可以重新出现)任何帮助将不胜感激,谢谢!
答案 0 :(得分:4)
我的工作解决方案适合任何需要它的人:
override func setEditing(editing: Bool, animated: Bool) {
if (editing) {
super.setEditing(true, animated: true)
self.navigationItem.rightBarButtonItem!.enabled = false
} else {
super.setEditing(false, animated: true)
self.navigationItem.rightBarButtonItem!.enabled = true
}
}
确保在编辑开始前后设置super.setEditing
,以保留编辑按钮的功能。
此外,如果您不希望UITableView
在用户离开UITableView
时保持编辑模式并且未先点击“完成”,请添加以下功能:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
if (editing) {
editing = false
}
}
答案 1 :(得分:1)
我在两个不同的按钮上遇到了同样的挑战,我需要在某些条件下隐藏和显示。首先是“编辑”按钮,在我的视图中进入编辑模式,第二个是“完成”以保存更改。所以他们必须互换。
我对UINavigationItem类进行了扩展,其中实现了两个方法。一个从栏中删除项目。第二个添加项目到栏。作为这些方法的参数,我传递了我强大的项目的IBOutlets,因此当项目从栏中移除时它们不会解除分配
extension UINavigationItem {
func deleteFromRightBar(item: UIBarButtonItem) {
// make sure item is present
guard let itemIndex = self.rightBarButtonItems?.index(of: item) else {
return
}
// remove item
self.rightBarButtonItems?.remove(at: itemIndex)
}
func addToRightBar(item: UIBarButtonItem) {
// make sure item is not present
guard self.rightBarButtonItems?.index(of: item) == nil else {
return
}
// add item
self.rightBarButtonItems?.append(item)
}
}
我使用了这样的方法
navigationItem.deleteFromRightBar(item: doneButton)
navigationItem.addToRightBar(item: editButton)
答案 2 :(得分:0)
您可以使用可选的数据源方法来检测何时正在编辑行tableView(_:canEditRowAtIndexPath:)
在该方法中,您可以隐藏或禁用条形按钮项(在UI和代码方面,禁用可能是更友好的事情)。条形按钮上没有hidden
属性,因此要正确隐藏它意味着you potentially do some grody coding暂时删除或使其消失。
无论如何,我建议像:
func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
self.navigationItem.rightBarButtonItem.enabled = false
return true
}