#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?'
показывает эту ошибку при добавлении в awakeFromNib5. Удалите слово класса из метода awake from. Просто напишите переопределение функции awakeFromNib()