如何将回调从TableView传递到TableView Cell?

时间:2019-11-21 06:37:41

标签: ios swift uitableview

我有一个tableview。在tableview的每个单元格中,都有一个上传按钮。单击该按钮时,我正在使用协议委托机制来告诉TableViewVC我需要显示文件选择器选项。我不了解的是,当为特定单元格选择了特定文件时,如何将回调从TableView传递到TableView Cell,以便我可以更改该单元格中标签的可见性。

这是我单击单元格中的按钮时的代码

protocol FileUploadDelegate {
    func uploadFile(documentId: Int,position: Int)
}

@IBAction func uploadDocumentClicked(_ sender: Any) {
        delegate?.uploadFile(documentId: documentId,position: position)
    }

在我的TableViewVC中,我已经实现了协议并为文件选择器编写了所有代码

现在使用以下方法

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

}

我需要将回调从tableView传递到触发操作的确切tableCell,以便可以更改该单元格中标签的可见性。我该如何实现?

2 个答案:

答案 0 :(得分:0)

您可以像这样修改此方法:

protocol FileUploadDelegate {
    func uploadFile(documentId: Int,position: Int, cellIndexPath: IndexPath)
}

您将获得所需的单元格,以后需要更新。您可以另存为属性(例如) 之后,您可以更新方法:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

}

通过tableView.reloadData()

cellForRowAtIndexPath中,您可以使用保存的索引路径更新特殊单元格

答案 1 :(得分:0)

TableViewCell.swift

class tableViewCell: UITableViewCell{
 var onButtonTapped : (() -> Void)? = nil
 override func awakeFromNib() {
    super.awakeFromNib()

 }
 @IBAction func buttonTapped(_ sender: Any) {
    if let onButtonTapped = self.onButtonTapped {
        onButtonTapped()
    }
}
}

ViewController.swift

class ViewController: UIViewController, UICollectionViewDelegate, 
UICollectionViewDataSource{

  func collectionView(_ collectionView: UICollectionView, 
  numberOfItemsInSection 
  section: Int) -> Int {
     guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: 
     "youridhere", for: indexPath) as? cellname else 
     { return UICollectionViewCell() }

        cell.onButtonTapped = {
            filepicker.item = . 
 self.model.item[indexPath.row]
        }
        return cell

  }
}