CollectionView внутри Tableview загрузка неверных данных для повторно используемых ячеек

#ios #swift #xcode #uitableview #uicollectionview

#iOS #swift #xcode #uitableview #uicollectionview

Вопрос:

Моя цель — показать строку заголовка в каждой метке ячейки collectionview.Но когда я запускаю верхние ячейки, которые уже загружены, в метках отображаются правильные значения, в то время как после прокрутки повторно используемых ячеек отображаются неправильные значения. Примечание: данные извлекаются из локального файла.

Мои данные следующие:

  • Тренды: 20 элементов
  • Обязательный просмотр: 3 элемента
  • Недавно добавлено: 8 элементов
  • Популярное: 2 элемента

Мой код:

ViewController.swift

 import UIKit

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {



var videosList:[VideosJSONElement]?
var videosListInstance:VideosDataAccessModel?

@IBOutlet weak var categoriesTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    videosListInstance = VideosDataAccessModel()
    
    videosList = videosListInstance?.videosList
    categoriesTableView.dataSource = self
    categoriesTableView.delegate = self
    
    
    categoriesTableView.reloadData()
    
    
    
}





func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return  videosList!.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "categoriesCell") as! CategoriesVideoCell
    cell.videos = videosList![indexPath.row].nodes
    cell.position = indexPath.row
    cell.categoryTitle.text  = videosList![indexPath.row].title
    cell.videosCollectionView.reloadData()
    cell.sceneContext = self

    return cell
}
}
 

Категорииvideocell.swift

 import UIKit

class CategoriesVideoCell: UITableViewCell,UICollectionViewDelegate,UICollectionViewDataSource {


@IBOutlet weak var categoryTitle: UILabel!
    var videos:[Node]?
var position:Int!

var sceneContext:UIViewController?

@IBOutlet weak var videosCollectionView: UICollectionView!


override func didMoveToSuperview() {
    super.didMoveToSuperview()
    videosCollectionView.dataSource = self
    videosCollectionView.delegate = self
}



override class func awakeFromNib() {
    super.awakeFromNib()
}


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return videos!.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    
    var cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for:indexPath) as! VideoCVCell

    
    cell.node = "(categoryTitle.text!)"
    return cell
}}
 

введите описание изображения здесь

Первые две ячейки имеют правильный текст метки

введите описание изображения здесь

Повторно используемые ячейки содержат неверные данные в метке

Комментарии:

1. В вашей таблице сначала установите позицию для метода строки, а затем перезагрузите свою коллекцию. cell.position = indexPath.row cell.videosCollectionView.reloadData()

2. Выполнено, но по-прежнему безуспешно

3. Можете ли вы попробовать установить метод делегата представления коллекции- источники данных внутри метода awakeFromNib класса table cell.

4. @RajaKishan Cannot assign value of type 'CategoriesVideoCell.Type' to type 'UICollectionViewDataSource?' показывает эту ошибку при добавлении в awakeFromNib

5. Удалите слово класса из метода awake from. Просто напишите переопределение функции awakeFromNib()