![](/img/trans.png)
[英]How to pass data from all TableViewCell to CollectionView in Swift3
[英]How pass data to an UICollectionView embedded in a TableViewCell (xCode - iOS - Swift 3)
我在TableViewCell中实现了CollectionView,但需要读取CollectionView上设置单元格的动态数据。
我可以从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)
}
}
最简单的方法是在要使用CollectionView
填充的数据源数组中的MultipleTableViewCell
内部创建一个方法。 现在在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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.