我需要在集合视图中的许多表视图中填充数据。随着数据的传入,表视图的数量正在增长,这是未知的。每个表视图都位于uicollectionview单元格中。水平滑动。当前,数据正在第一个表中显示,在第三和第五个表中显示,依此类推。并且所有数据都是相同的。我希望仅首先显示数据。当我滑动到下一张表时,该表将在其中显示新数据。
编辑:
我可以在其他表视图中显示数据。然后在仍然有数据的表视图之间移动,这就是我想要的。
它跳过所有其他表视图并显示数据,我不知道为什么!
更新:
indexPath.item也发生了一些奇怪的事情: 当我在第一个单元格中时,它将显示indexPath.item = 0,当我在中间单元格中时,它将显示indexPath.item =2。
正如您所看到的,indexPath.item与MenuBar相比有所不同并且全部弄乱了,我希望它们具有相同的
更新
解决了以下gif问题:
collectionView.isPrefetchingEnabled = false
现在数据已在第一个表视图中正确显示,并且当我切换到下一个表视图时,新数据将显示在该表视图中,但是随后重复出现,因此第3个与第1个相同,第4个与第2个相同。 / p>
使用代码更新: MenuBar(带有单元格的顶部Uicollection视图,带圆圈的1,2,3..etc图像)
class MenuBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
NewReceiveViewController
class NewReceiveViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
var myData: [[UInt8]] = [] // will this be ReceivedArrays?
....
override func viewDidLoad() {
super.viewDidLoad()
collectionView.register(ReceivedCell.self, forCellWithReuseIdentifier: cellId)
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! ReceivedCell
cell.backgroundColor = UIColor.lightGray // just to see where the cell is
cell.configure(with: myData[indexPath.row])
return cell
class ReceivedCell: UICollectionViewCell {
//vars for the data
var recievedArrays: [[UInt8]] = [] //receivedbytes array is put into array here
var receivedBytes: [UInt8] = []{ //receieved bytes
didSet {
tableView.reloadData()
}
var data: [UInt8] = [] // will this be receieved bytes?
func configure(with data: UInt8) {
self.data = [data]
self.tableView.dataSource = self
}
extension ReceivedCell: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return recievedArrays.count //counting and returning how many receivedbytes arrays in receivedArrays
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: tableViewCell, for: indexPath)
...
// table cells set here
// I'm a bit unsure how to set up the cell with self.data
...
return cell
答案 0 :(得分:1)
您可以通过将每个单元格设置为其自己的tableView的委托来完成此操作。
class MyVC: UICollectionViewDataSource {
var myData: [DataType]! // You MUST populate this value with your data before you start getting delegate calls. You should probably set this as soon as you initialize this view.
func collectionView(_ collectionView: UICollectionView, cellForRowAt indexPath: IndexPath) -> UICollectionViewCell {
// Configure collection view cell
cell.configure(with: myData[indexPath.row]
return cell
}
}
class MyCell: UICollectionViewCell, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var data: DataType!
func configure(with data: DataType) {
self.data = data
self.tableView.dataSource = self
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Set up table cell using self.data
return cell
}
}