Я пытаюсь вставить UITableView в UICollectionViewCell. Мне удается все загрузить. Однако, когда он загружается, он, кажется, случайным образом использует последнее загруженное значение для элементов списка UITableView. Мой вывод DebugPrint, кажется, загружает все CollectionViewCells, прежде чем даже обратиться к TableView. После установки CollectionViewCells он заполняет TableView любым оставшимся значением. Как я могу решить эту проблему, чтобы использовать правильные значения? Я подозреваю, что это связано с тем, как я использую IndexPath, но я новичок в Swift.
Заполнение UICollectionView
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: releaseIdentifier, for: indexPath) as! ReleaseCollectionViewCell
let vid: VideoItem
vid = Video[indexPath.item]
let rating = vid.Rating
let denominator = 2.0
let roundedRating = round(rating*denominator )/denominator
if vid.SiteVideoID != 0 {
cell.ReleaseImage.setImageFromURl(stringImageUrl: "\(file.BaseURL)/sitePictures/\(GetFilePath(ID: String(vid.SiteVideoID)))/\(String(vid.SiteVideoID)).jpg")
} else {
cell.ReleaseImage.setImageFromURl(stringImageUrl: "\(file.BaseURL)/pictures/\(GetFilePath(ID: String(vid.VideoID)))/\(String(vid.VideoID))_001.png")
}
cell.ReleaseDate.text = vid.ReleaseDate
cell.ReleaseTitle.text = vid.Title
cell.SiteLogo.setImageFromURl(stringImageUrl: "\(file.BaseURL)/siteLogos/" + String(vid.SiteID) + ".png")
if vid.VideoID == 0 {
cell.ReleaseImage.alpha = 0.5
} else {
cell.ReleaseImage.alpha = 1.0
}
indexPathItem = -1
indexPathItem = indexPath.item
debugPrint(indexPathItem)
cell.TagsView.delegate = self
cell.TagsView.dataSource = self
return cell
}
и для заполнения TableView
extension MiscCollectionViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if indexPathItem != -1 {
return Video[indexPathItem].Tags.count
} else {
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let tags = tableView.dequeueReusableCell(withIdentifier: "Tag", for: indexPath) as! TagTableViewCell
debugPrint(String(indexPathItem) + " " + Video[indexPathItem].Tags[indexPath.row])
tags.TagLabel.text = String(indexPathItem) //Video[indexPathItem].Tags[indexPath.row]
return tags
}
}
@Damon Может быть до 500 в зависимости от набора результатов из базы данных
Попробуйте tableview.reload () перед оператором возврата ячейки метода cellForItemAt представления коллекции.
@Damon, он не будет построен, если я вставлю его в func collectionView, или вы имели в виду tableview?
@Damon - обновление добавило cell.TagsView.reloadData() до return cell и, к сожалению, дало тот же результат. Интересно, однако, что количество возвращаемых строк кажется правильным. Это просто значения строк неверны
Интереснее. Значения кажутся правильными при прокрутке списка, но они неверны при загрузке представления.





Сколько существует ячеек представления коллекции? Поскольку, если число фиксировано и меньше, я бы рекомендовал использовать несколько представлений вместо представления коллекции.