editButtonItem不起作用

时间:2016-04-29 11:33:10

标签: ios swift uitableview

我在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)
}

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

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)
    }
}

3 个答案:

答案 0 :(得分:2)

对于 Swift 3 ,请在 UIViewController 类中实现:

override func setEditing(_ editing: Bool, animated: Bool) {
    if(editing && !tableView.isEditing){
        tableView.setEditing(true, animated: true)
    }else{
        tableView.setEditing(false, animated: true)
    }
}

(对于UITableViewController类,这不是必需的)。

您还应该在之前设置 editButtonItem

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.rightBarButtonItem = editButtonItem
}

然后它的作品!ツ

答案 1 :(得分:1)

为了让您的桌子在按钮点按时在编辑和普通模式之间切换,您需要实现

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
        if self.tableView.editing {
            return UITableViewCellEditingStyle.Delete
        }
        else{
            return UITableViewCellEditingStyle.None
        }
    }

按下按钮或按钮的IBAction:)

@IBAction func editButtonTapped(sender: AnyObject) {
    var button =  sender as! UIButton
    if button.titleLabel!.text! == "Edit" {
        self.tableView.editing = true
        button.setTitle("Done", forState: UIControlState.Normal)
    }
    else{
        self.tableView.editing = false
        button.setTitle("Edit", forState: UIControlState.Normal)
    }
}

修改 刚刚意识到导航栏上有条形按钮项,而不是简单的UIButton:)

所以你可以修改如下的IBAction :)确保你选择UIBarButton项目的系统项作为自定义并将标题设置为编辑

@IBAction func editButtonTapped(sender: AnyObject) {
    let button =  sender as! UIBarButtonItem
    if button.title! == "Edit" {
        self.tableView.editing = true
        button.title = "Done"
    }
    else{
        self.tableView.editing = false
        button.title = "Edit"
    }
}

这应该做的工作:)快乐编码:)

答案 2 :(得分:1)

塞德里克·迈克尔(Cedric Michael)的答案几乎可以奏效,但是它禁用了Using Edit Done 标题及相关状态之间的自动动画切换。更好的解决方法是:

editButtonItem

此外,如果您要隐藏空白购物车的 Edit 按钮,最好在override func setEditing(_ editing: Bool, animated: Bool) { super.setEditing(editing, animated: animated) tableView.setEditing(editing, animated: animated) } 中设置navigationItem.rightBarButtonItem = editButtonItem并简单地设置{{1 }}根据购物车在viewDidLoad()中为true或false。