Ios 当UITableView处于编辑模式时,如何隐藏工具栏按钮项?(Swift)

Ios 当UITableView处于编辑模式时,如何隐藏工具栏按钮项?(Swift),ios,swift,uitableview,uinavigationbar,uibarbuttonitem,Ios,Swift,Uitableview,Uinavigationbar,Uibarbuttonitem,标题基本上说明了一切 我有一个UITableView,我希望RightBarButtonItem项在UITableView处于编辑模式时消失。不幸的是,我找到的所有答案都建议将按钮设置为零。。。这对我不起作用,因为我不想删除按钮及其引用,只需在UITableView处于编辑模式时将其隐藏即可 那么,我在想该怎么做时遇到的困难是: 检测UITableView何时进入编辑模式 隐藏RightBarButtonItem(不完全删除) 检测UITableView何时离开编辑模式(以便按钮可以重新出现)

标题基本上说明了一切

我有一个
UITableView
,我希望
RightBarButtonItem
项在
UITableView
处于编辑模式时消失。不幸的是,我找到的所有答案都建议将按钮设置为零。。。这对我不起作用,因为我不想删除按钮及其引用,只需在
UITableView
处于编辑模式时将其隐藏即可

那么,我在想该怎么做时遇到的困难是:

  • 检测
    UITableView
    何时进入编辑模式
  • 隐藏
    RightBarButtonItem
    (不完全删除)
  • 检测
    UITableView
    何时离开编辑模式(以便按钮可以重新出现)

  • 任何帮助都将不胜感激,谢谢

    您可以使用可选的数据源方法来检测行何时被编辑

    在该方法中,您可以隐藏或禁用bar按钮项(就UI和代码而言,禁用可能是更友好的做法)。条形按钮上没有
    hidden
    属性,因此正确隐藏它意味着临时删除或使其消失

    无论如何,我建议如下:

    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
    保持编辑模式,请添加以下功能:

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(true)
        if (editing) {
            editing = false
        }
    }
    

    我有两个不同的酒吧按钮,我需要隐藏和显示在某些条件下相同的挑战。第一个是“编辑”按钮,用于在我的视图上进入编辑模式,第二个是“完成”按钮,用于保存更改。因此,它们必须交替出现

    我对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)
    

    谢谢你的及时回复!禁用按钮也同样有效。但是,tableView(uU2;:willBeginEditingRowAtIndexPath:)方法有一个问题:我的按钮唯一被禁用的时间是当我滑过一行编辑(删除)它时。。。当按下“编辑”按钮时,该按钮不会被禁用(这也会将UITableView置于编辑模式)。是的,当调用
    willBeginEditingRowAtIndexPath
    方法时,实际上是开始真正编辑行的时候。为了早点赶上,太好了,这很有帮助。我会将我的最终解决方案张贴在下面,供其他需要的人使用。