gpt4 book ai didi

ios - 从 View Controller Swift 更新 Collection View

转载 作者:行者123 更新时间:2023-11-28 10:53:25 25 4
gpt4 key购买 nike

我的 Storyboard中有这个。

ViewController -> Tableview -> 自定义单元格

自定义单元格在 Collection View 中。

在我的 ViewController 中,我有一些过滤器按钮,我想过滤 Collection View 的数组数据并重新加载它。

所以我尝试用下面的代码做一个委托(delegate)方法

protocol ReloadTheDataDelegate: class {
func reloadTheCV()
}


class NearMeViewController: UIViewController {
weak var delegate: ReloadTheDataDelegate?

@IBAction func anAction(_sender : AnyObject){

requests.weekendEventData.sort() { $0.realDate < $1.realDate }
delegate?.reloadTheCV()

}

}


class WeekendTableViewCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UICollectionViewDelegate, ReloadTheDataDelegate {

@IBOutlet public weak var weekendCV: UICollectionView!

func reloadTheCV() {
print("done") //never printed
weekendCV.reloadData()
}

override func awakeFromNib() {
super.awakeFromNib()


if let myViewController = parentViewController as? NearMeViewController {
myViewController.delegate = self
}

weekendCV.register(UINib(nibName: "WeekendCollectionViewCell", bundle: nil),
forCellWithReuseIdentifier: "phoneweekendcell")

weekendCV.delegate = self
weekendCV.dataSource = self
}
}

以及我使用 ViewController 的扩展

extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}

谁能解释为什么函数 reloadTheCV() 从未被调用?

最佳答案

NearMeViewController 委托(delegate) (ReloadTheDataDelegate ) 为 nil。由于它不打印。您没有设置 delegate 并且这种方法也太复杂了。

因此,与其使用 protocol 概念来代替。您可以通过以下方式简单地重新加载单元格的 Collection View 。

在您的 NearMeViewController 上添加以下函数。并在需要重新加载 Collection View 时调用。

func reloadCellCV() {
for cell in tableView.visibleCells {
if let cell = cell as? WeekendTableViewCell {
DispatchQueue.main.async {
cell.weekendCV.reloadData()
}
}
}
}

关于ios - 从 View Controller Swift 更新 Collection View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com