我有一个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,以便可以更改该单元格中标签的可见性。我该如何实现?
答案 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
}
}