如何将数据传递给embedded在TableViewCell中的UICollectionView(xCode – iOS – Swift 3)

我在TableViewCell中实现了一个CollectionView,但是我需要为CollectionView上的单元格读取dynamic数据。

我可以从类TableViewCell读取扩展数据,也许可以帮助我从ViewController传递数据到类TableViewCell。

class MultipleTableViewCell: UITableViewCell { @IBOutlet fileprivate weak var collectionView: UICollectionView! } extension MultipleTableViewCell : UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 3 // array.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "foodCell", for: indexPath) as! UserCollectionViewCell let dict = array.object(at: indexPath.row) as! NSDictionary //Like this cell.name.text = "How do you read data from ViewController" cell.email.text = "How do you read data from ViewController" cell.phone.text = dict["phone"] as? String //Like this cell.image.image = "How do you read data from ViewController" return cell } } extension MultipleFoodTableViewCell : UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let itemsPerRow:CGFloat = 1 let hardCodedPadding:CGFloat = 20 let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding) return CGSize(width: itemWidth, height: itemHeight) } } 

最简单的方法就是在你的MultipleTableViewCell里面用你想用CollectionView填充的数据源数组创build一个方法。 现在在TableView cellForRowAt方法中调用这个方法。

 class MultipleTableViewCell: UITableViewCell { @IBOutlet fileprivate weak var collectionView: UICollectionView! var array = [String]() //Change with Your array type func fillCollectionView(with array: [String]) { self.array = array self.collectionView.reloadData() } } 

现在在cellForRowAt调用此方法,并传递collectionView的数据源数组。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier") as! MultipleTableViewCell cell.fillCollectionView(with: ["A","B","C"]) //Pass your array return cell }