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 处于编辑模式时如何隐藏栏按钮项? (迅速)的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 处于编辑模式时选择行

处于编辑模式时的 UITableViewCell 宽度问题

如何在编辑模式下替换 Grouped UITableView 的加号/减号按钮?

UITableView 在进入编辑模式时取消选择单元格

已处于编辑模式时滑动删除

UITableView - 在编辑模式下重用单元格