如何将数据传递给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 }