2017-07-10 180 views
0

我有这个在我的storyboard从视图控制器Swift更新集合视图

视图控制器 - >泰伯维 - >自定义单元格

定制电池具有集合视图中。

在我的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

我在这里很困惑。你为什么在表格视图单元格中有一个集合视图?而且,当你说'ViewController - > Tableview - > Custom cell'时,你的意思是它们彼此重叠,对吗?没有通过segue连接? –

+0

@FangmingNing它就像一个netflix应用程序...是的,它的另一个顶部 –

+0

好的。那么为什么你的单元格内有一个'UICollectionView'?你的过滤器按钮在哪里?我认为你需要的只是过滤按钮被点击时重新加载表格视图,对吧? –

回答

2

NearMeViewController代表(ReloadTheDataDelegate)是nil。由于它没有打印。你没有设置delegate,这种方法也太复杂了。

所以,而不是接近的概念。只需按照以下方式重新加载单元格的集合视图即可。

在您的NearMeViewController上添加以下功能。并且在你需要重新加载收集视图时调用。

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

Yeap的工作..虽然如果我发现委托人为什么是零,这将是很好的! –

+0

您必须在创建单元时将单元对象设置为您的'NearMeViewController'委托。如果你有多个单元格,这种方法将无法工作。因为一个单元对象将会替换另一个单元对象。 – Subramanian

相关问题