Заполнение табличных представлений данными в представлении коллекции - PullRequest
0 голосов
/ 14 апреля 2019

Мне нужно заполнить данные множеством табличных представлений, которые находятся в представлении коллекции. Количество просмотров таблиц растет с приходом данных, что неизвестно. Каждое табличное представление находится в ячейке uicollectionview. Смахивание по горизонтали. В настоящее время данные отображаются в первой таблице и в третьей, пятой и так далее. И все данные одинаковы. Я хочу, чтобы данные отображались только в первую очередь. И когда я пролистываю до следующей таблицы, в таблице отображаются новые данные.

Edit:

Я могу отображать данные в каждом другом виде таблицы. И переходите от одного вида таблицы к другому с данными, которые мне нужны.

Он пропускает все остальные таблицы и отображает данные, и я не знаю почему!

Я могу отображать данные в первом (оранжевом) виде таблицы, но следующие данные отображаются в третьем (светло-коричневом), а не красном.

Обновление:

С indexPath.item происходит нечто странное: Когда я нахожусь в первой ячейке, она печатает indexPath.item = 0, когда я нахожусь в средней ячейке, она отображает, что она indexPath.item = 2.

Update As you can see the indexPath.item is different and all messed up compared to the MenuBar, I want them to have equal

Как вы можете видеть, indexPath.item отличается и все запутано по сравнению с MenuBar, я хочу, чтобы они равнялись

Обновление

Решено выше GIF проблема с:

collectionView.isPrefetchingEnabled = false

Теперь данные отображаются правильно при первом просмотре таблицы, и когда я переключаюсь на следующий просмотр таблицы, там отображаются новые данные, но затем они дублируются, поэтому 3-й совпадает с 1-м, а 4-й совпадает с 2-м табличным видом.

Обновление с кодом: MenuBar (Top Uicollectionview с ячейками, обведены в кружок 1,2,3 ... и т. Д. Изображения)

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

1 Ответ

1 голос
/ 14 апреля 2019

Этого можно добиться, установив каждую ячейку в качестве своего делегата 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
     }

}
...