我在storyboard
。
ViewController - > Tableview - >自定义单元格
自定义单元格位于集合视图中。
在我的ViewController
内部,我有一些过滤器按钮,我想过滤集合视图的数组数据并重新加载它。
所以我尝试使用以下代码创建委托方法
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()
吗?
答案 0 :(得分:2)
NearMeViewController
委托(ReloadTheDataDelegate
)为nil
。由于它不打印。您没有设置delegate
,这种方法也太复杂了。
所以,而不是接近protocol
概念。您只需按以下方式重新加载单元格的集合视图即可。
在NearMeViewController
上添加以下功能。并在需要重新加载集合视图时调用。
func reloadCellCV() {
for cell in tableView.visibleCells {
if let cell = cell as? WeekendTableViewCell {
DispatchQueue.main.async {
cell.weekendCV.reloadData()
}
}
}
}