reloadData后无法单击tableView单元格中的按钮

Posted

技术标签:

【中文标题】reloadData后无法单击tableView单元格中的按钮【英文标题】:Can't Click on button in tableView cell after reloadData 【发布时间】:2018-08-02 17:28:16 【问题描述】:

我在单元格中实现了 3 个按钮和按钮操作。调用 tableView.reloadData() 后无法单击单元格中的任何按钮。

在控制器中的 func cellForRow 调用 cell?.onbuttonTappedAdd 等。添加元素后,我调用了 tabelViewReloadData。

//TableViewCell

var onButtonTappedAdd : (() -> Void)? = nil
var onButtonTappedRemove : (() -> Void)? = nil


override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code



func configureCell(orderitem: OrderItem)
    self.orderItem = orderitem!




func setButtonGradient()



@IBAction func changeValue(_ sender: Any) 




@IBAction func btnAddValue(_ sender: Any) 
    if let onButtonTappedAdd = self.onButtonTappedAdd
    
    onButtonTappedAdd()
    

@IBAction func btnRemoveValue(_ sender: Any) 
    if let onButtonTappedRemove = self.onButtonTappedRemove 
    onButtonTappedRemove()
    

//ViewControll cellForRow

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

   var cell = tableViewOrderItem.dequeueReusableCell(withIdentifier: "OrderItemCheckoutCell", for: indexPath)
        as? OrderItemCheckoutCell
    var orderItem = GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row]

    cell?.configureCell(orderitem: orderItem)

   cell?.onButtonTappedAdd = 

              GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].quantity = GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].quantity! + (GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].Product?.bigValue)!

   self.tableViewOrderItem.reloadData()

     self.setTotalInfo()
    
    cell?.onButtonTappedRemove = 

                 GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].quantity = GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].quantity! - (GlobalArray.orderArrayList[indexPath.section].ListOrderItem[indexPath.row].Product?.bigValue)!
                       self.tableViewOrderItem.reloadData()
        


    return cell!


【问题讨论】:

发布cellForRow(at:) 方法的代码 @DuncanC 我尝试了 3 次后同样的问题 在问题中附上cellForRowAt的代码 “我尝试了 3 次同样的问题”。嗯?编辑您的问题并为您的 cellForRow(at:) 方法添加代码,以便我们查看它的作用。 @DuncanC 对不起...我是更新问题 【参考方案1】:

在“cellforRow”方法之外重新加载 TableView

【讨论】:

以上是关于reloadData后无法单击tableView单元格中的按钮的主要内容,如果未能解决你的问题,请参考以下文章

tableview.reloaddata() 在使用 coredata 时搜索栏取消按钮后不起作用

尝试调用 tableView.reloadData 时出现 NSInvalidArgumentException?

在 tableview.reloaddata 崩溃并出现错误 Unexpectedly found nil

Swift 3 tableView 未在 reloadData() 上更新

使用自我调整大小的单元格后,reloadData 不再起作用

使用通知中心和 tableview.reloaddata() 不刷新表视图