如何在 UITableView 处于编辑模式时隐藏条形按钮项目? (Swift)
How to hide Bar Button Items when UITableView is in edit mode? (Swift)
标题基本上说明了一切。
我有一个 UITableView
,我希望 RightBarButtonItem
项在 UITableView
处于编辑模式时消失。不幸的是,到目前为止我找到的所有答案都建议将按钮设置为零......这对我不起作用,因为我不想摆脱按钮和对它的引用,只是在UITableView
处于编辑模式。
我不知道该怎么做,然后是:
- 检测
UITableView
何时进入编辑模式
- 隐藏
RightBarButtonItem
(不完全删除)
- 检测
UITableView
何时离开编辑模式(以便按钮可以重新出现)
任何帮助将不胜感激,谢谢!
您可以使用可选的数据源方法来检测行何时被编辑,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
}
我对任何需要它的人的工作解决方案:
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
且未先单击 "done" 时保持编辑模式,请添加以下内容功能:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
if (editing) {
editing = false
}
}
我遇到了同样的挑战,我需要在某些情况下隐藏和显示两个不同的条形按钮。第一个是 "edit" 按钮,用于在我的视图中进入编辑模式,第二个是 "done" 按钮,用于保存更改。所以他们必须互换出现。
我对 UINavigationItem class 进行了扩展,其中实现了两种方法。一个从栏中删除项目。第二个将项目添加到栏中。作为这些方法的参数,我传递了我制作的项目的 IBOutlets,因此当项目从 bar
中移除时它们不会被释放
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)
标题基本上说明了一切。
我有一个 UITableView
,我希望 RightBarButtonItem
项在 UITableView
处于编辑模式时消失。不幸的是,到目前为止我找到的所有答案都建议将按钮设置为零......这对我不起作用,因为我不想摆脱按钮和对它的引用,只是在UITableView
处于编辑模式。
我不知道该怎么做,然后是:
- 检测
UITableView
何时进入编辑模式 - 隐藏
RightBarButtonItem
(不完全删除) - 检测
UITableView
何时离开编辑模式(以便按钮可以重新出现)
任何帮助将不胜感激,谢谢!
您可以使用可选的数据源方法来检测行何时被编辑,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
}
我对任何需要它的人的工作解决方案:
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
且未先单击 "done" 时保持编辑模式,请添加以下内容功能:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
if (editing) {
editing = false
}
}
我遇到了同样的挑战,我需要在某些情况下隐藏和显示两个不同的条形按钮。第一个是 "edit" 按钮,用于在我的视图中进入编辑模式,第二个是 "done" 按钮,用于保存更改。所以他们必须互换出现。
我对 UINavigationItem class 进行了扩展,其中实现了两种方法。一个从栏中删除项目。第二个将项目添加到栏中。作为这些方法的参数,我传递了我制作的项目的 IBOutlets,因此当项目从 bar
中移除时它们不会被释放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)