[英]UITableView with Sections Repeating cell data in all the sections
[英]Same data is repeating in sections in UITableView and UICollectionView in swift 4
我是 swift 的新手,正在开发一个应用程序,我在 UITableView 内部的 collectionView 中绑定数据,我在 UICollectionView 中发送数据(它们是图像),如多维数组
[[<UIImage: 0x600000292610>, {1280, 720}, <UIImage: 0x600000292bb0>, {1000, 563}, <UIImage: 0x600000292c50>, {2048, 1200}, <UIImage: 0x6000002926b0>, {1080, 675}, <UIImage: 0x600000292c00>, {1156, 577}, <UIImage: 0x60800028e650>, {322, 156}], [<UIImage: 0x60800028e290>, {1600, 840}, <UIImage: 0x60800028de30>, {1640, 878}, <UIImage: 0x600000294e10>, {322, 156}, <UIImage: 0x600000294d70>, {1917, 1080}, <UIImage: 0x600000295310>, {1311, 737}, <UIImage: 0x60800028dac0>, {258, 195}], [<UIImage: 0x600000295720>, {1601, 1281}, <UIImage: 0x600000295630>, {1600, 1341}, <UIImage: 0x60800028f500>, {1200, 919}, <UIImage: 0x600000296e90>, {4088, 2921}], [<UIImage: 0x608000290ae0>, {1600, 584}, <UIImage: 0x600000297160>, {1400, 1050}, <UIImage: 0x600000296b70>, {717, 476}, <UIImage: 0x608000290e50>, {2280, 1060}, <UIImage: 0x600000297390>, {1068, 427}, <UIImage: 0x608000291260>, {3200, 1600}, <UIImage: 0x608000290e00>, {258, 195}], [<UIImage: 0x608000291490>, {1300, 630}, <UIImage: 0x6080002914e0>, {512, 366}, <UIImage: 0x608000290bd0>, {1200, 628}], [<UIImage: 0x600000297b60>, {1200, 628}, <UIImage: 0x6000002972f0>, {1536, 1024}, <UIImage: 0x608000291b70>, {1540, 705}, <UIImage: 0x6000002985b0>, {1200, 676}, <UIImage: 0x60800009c4d0>, {443, 377}]]
我的问题是我看到第 0、1、2 节是唯一创建的,但是第 3 节的生成与第 0 节相同,
这是我在 collectionView 中的代码
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("numberOfItemsInSection ******",self.imageArray[section].count,"********")
return self.imageArray[section].count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell: CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as? CollectionViewCell
{
// if(imageArray[indexPath.section].count>0){
print("---> ",indexPath.section," --- item ->",indexPath.row)
cell.imageView.image = imageArray[indexPath.section][indexPath.row]
//}
return cell
}
return UICollectionViewCell()
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
print("numberOfSections ******",self.imageArray.count,"********")
return self.imageArray.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
let size = CGSize(width: 120, height: 300)
return size
}
这是我的 tableView Controller
extension CompanyViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if self.sectionHeaderName.count>0 {
print("*******",self.sectionHeaderName[section],"*******")
return self.sectionHeaderName[section]
}else{
return ""
}
}
//NUMBER OF SECTION WE WANT IN A TABLE
func numberOfSections(in tableView: UITableView) -> Int {
return self.sectionHeaderName.count
}
/*NUMNBER OF ROWS IN A SECTION*/
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? TableViewCell
{
return cell
}
return UITableViewCell()
}
}
我在这里挣扎了两天,但找不到任何解决方案。 任何帮助,将不胜感激
TIA
您应该在 TableViewCell willDisplay中设置数据源或委托。
func setCollectionViewDataSourceDelegate(dataSourceDelegate: UICollectionViewDataSource & UICollectionViewDelegate, forRow row: Int) {
collectionView.delegate = dataSourceDelegate
collectionView.dataSource = dataSourceDelegate
collectionView.reloadData()
}
override func tableView(tableView: UITableView,
willDisplayCell cell: UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath) {
guard let tableViewCell = cell as? TableViewCell else { return }
tableViewCell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row)
}
挠了3天终于找到答案了
我必须像这样从 cellForRowAt function 中的 TableView Extension 传递我的数据
cell.cellData = self.imageArray[indexPath.section]
return cell
在我定义 CollectionView 的 TableViewCell 中,我声明了变量
var cellData = [UIImage]()
并使用相同的变量来获取所有集合视图函数中的图像
在CellForItemAt
需要从下面的数组中获取数据并使用行而不是项目和部分,因为当向上和向下滚动 tableView 时,图像可能会在单元格中随机显示或错误显示,因此使用indexPath.row
可以防止图像的随机播放。
cell?.imageView.image = cellData[indexPath.row]
我需要补充的另一件事是
cell.collectionView.reloadData()
因为 TableView 正在参考我的第一个数组索引而不是我传递的内容。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.