当UITableView处于编辑模式时如何隐藏栏按钮项? (迅速)

时间:2015-07-29 06:40:03

标签: ios swift uitableview uinavigationbar uibarbuttonitem

标题基本上说明了一切。

我有一个UITableView,我希望RightBarButtonItem项在UITableView处于编辑模式时消失。不幸的是,到目前为止我发现的所有答案都建议将按钮设置为nil ...这对我不起作用,因为我不想摆脱按钮和对它的引用,只需隐藏它UITableView处于编辑模式。

我无法确定要做什么,然后是:

  1. 检测UITableView何时进入编辑模式
  2. 隐藏RightBarButtonItem(不完全删除)
  3. 检测UITableView何时离开编辑模式(因此按钮可以重新出现)
  4. 任何帮助将不胜感激,谢谢!

3 个答案:

答案 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
}