UITableView 处于编辑模式时如何隐藏栏按钮项? (迅速)
Posted
技术标签:
【中文标题】UITableView 处于编辑模式时如何隐藏栏按钮项? (迅速)【英文标题】:How to hide Bar Button Items when UITableView is in edit mode? (Swift) 【发布时间】:2015-07-29 06:40:02 【问题描述】:标题基本上说明了一切。
我有一个UITableView
,我希望RightBarButtonItem
项目在UITableView
处于编辑模式时消失。不幸的是,到目前为止我找到的所有答案都建议将按钮设置为 nil ...这对我不起作用,因为我不想摆脱按钮和对它的引用,只需在UITableView
处于编辑模式。
那么,我不知道该怎么做是:
-
检测
UITableView
何时进入编辑模式
隐藏RightBarButtonItem
(不完全删除)
检测UITableView
何时离开编辑模式(这样按钮可以重新出现)
任何帮助将不胜感激,谢谢!
【问题讨论】:
【参考方案1】:我为任何需要它的人提供的工作解决方案:
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
【讨论】:
【参考方案2】:您可以使用可选的数据源方法来检测何时正在编辑行,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
【讨论】:
感谢您的及时回复!禁用该按钮也可以正常工作。但是,tableView(_:willBeginEditingRowAtIndexPath:) 方法存在一个问题:我的按钮被禁用的唯一一次是当我滑过一行来编辑(删除)它时......当“编辑”时按钮没有被禁用按下按钮(这也将 UITableView 置于编辑模式)。 是的,当willBeginEditingRowAtIndexPath
方法被调用时,就是你真正开始真正对行进行编辑的时候。要早点发现,we need to implement a table's datasource method.
完美,有帮助。我将在下面发布我的最终解决方案,供其他需要它的人使用。【参考方案3】:
我在使用两个不同的条形按钮时遇到了同样的挑战,我需要在某些情况下隐藏和显示它们。首先是“编辑”按钮在我的视图上进入编辑模式,第二个是“完成”以保存更改。所以它们必须交替出现。
我对 UINavigationItem 类进行了扩展,其中实现了两种方法。一个从栏中删除项目。其次将项目添加到栏。作为这些方法的一个参数,我传递了我做强的项目的 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 处于编辑模式时如何隐藏栏按钮项? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章