IT虾米网

ios之editButtonItem 不起作用

qq78292959 2023年06月07日 程序员 40 0

我在 UIViewController 中有一个 TableView ,它启用了删除行的编辑功能。从右侧滑动可让我删除行,导航栏上有编辑按钮,但它实际上没有做任何事情,只是从说编辑切换到完成。

下面是我创建表格 View 的方式。

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

请您参考如下方法:

Cedric Michael 的回答几乎可行,但它禁用了 editButtonItemEditDone 标题及相关状态之间的自动动画切换。更好的解决方法是:

override func setEditing(_ editing: Bool, animated: Bool) { 
    super.setEditing(editing, animated: animated) 
    tableView.setEditing(editing, animated: animated) 
} 

此外,如果您想隐藏空购物车的Edit 按钮,最好在viewDidLoad 中设置navigationItem.rightBarButtonItem = editButtonItem () 并根据购物车在 viewWillAppear() 中将 navigationItem.rightBarButtonItem.isHidden 设置为 true 或 false。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!