editButtonItem 不起作用

rag*_*oat 3 uitableview ios swift

我在 UIViewController 中有一个表视图,启用了编辑功能以删除行。从右侧滑动可以删除行,并且导航栏上有编辑按钮,但除了从“编辑”切换到“完成”之外,它实际上没有执行任何操作。

这是我创建表视图的方法。

override func viewWillAppear(animated: Bool) {
    for view in self.view.subviews {
        view.removeFromSuperview()
    }

    if sharedCart.shoppingCart.isEmpty {
        self.navigationItem.rightBarButtonItem = nil

        isEmptyLabel = UILabel(frame: CGRectMake(self.view.frame.width / 2, self.view.frame.height / 2, self.view.frame.width, self.view.frame.height))
        isEmptyLabel.center = self.view.center
        isEmptyLabel.text = "Your cart is empty."
        isEmptyLabel.textAlignment = .Center
        isEmptyLabel.textColor = UIColor.whiteColor()
        isEmptyLabel.font = UIFont(name: "Helvetica-Light", size: 20.0)

        self.view.addSubview(isEmptyLabel)
    } else {
        isEmptyLabel.removeFromSuperview()
        total = 0

        let editItem = self.editButtonItem()
        self.navigationItem.rightBarButtonItem = editItem

        tableView = UITableView(frame: self.view.frame, style: .Grouped)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.backgroundColor = UIColor.clearColor()
        tableView.contentInset = UIEdgeInsetsMake(44, 0, 0, 0)

        tableView.registerNib(UINib(nibName: "CartCell", bundle: nil), forCellReuseIdentifier: "passCartCell")
        tableView.registerNib(UINib(nibName: "CartFooterView", bundle: nil), forHeaderFooterViewReuseIdentifier: "cartFooter")

        self.view.addSubview(tableView)
}
Run Code Online (Sandbox Code Playgroud)

我使用这些方法进行编辑。

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        sharedCart.shoppingCart.removeAtIndex(indexPath.row)

        self.viewWillAppear(true)
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ton 5

塞德里克·迈克尔的答案几乎有效,但它禁用了“编辑”“完成”editButtonItem标题及关联状态之间的自动动画切换。更好的修复是这样的:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    tableView.setEditing(editing, animated: animated)
}
Run Code Online (Sandbox Code Playgroud)

另外,如果您想隐藏空购物车的“编辑”按钮,最好的设置形式是navigationItem.rightBarButtonItem = editButtonItem根据购物车viewDidLoad()设置navigationItem.rightBarButtonItem.isHidden为 true 或 false 。viewWillAppear()