Я пытаюсь использовать IndexPath текущего CollectionViewcell для доступа к данным из словаря. Ключи словаря имеют тип Int.
Этот CollectionView имеет ячейки «полной страницы», что означает, что каждая ячейка занимает всю область просмотра, где я использую горизонтальную прокрутку (с включенной подкачкой) для навигации между ячейками.
Словарь:
var dataFromServer: [Int: [VillageFestival]]?
Каждый CollectionViewCell имеет внутри TableView, где я планирую иметь переменное количество строк, в зависимости от того, сколько предметов есть в [VillageFestival]
Однако в CollectionView cellForItemAt indexPath
поведение метода вызывает некоторые проблемы, так как печать indexPath.item или установка его в качестве заголовка моего navigationController возвращает странные, но "понятные" результаты, учитывая, как я думаю, работает dequeueReusableCell? ...
Пример: текущий индекс равен 0. Когда я прокручиваю вправо, текущий индекс теперь равен 2. Если я перехожу на страницу 6, а затем на одну страницу назад, текущий индекс показывает 3.
Я изменил ключи моего словаря с Date на String, а теперь на Int, чтобы упростить логику. Но проблема сохраняется.
Я использую глобальный pageIndex: Int
, который обновляется внутри CollectionView cellForItemAt
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
pageIndex = indexPath.item
self.navigationController?.navigationBar.topItem?.title = String(pageIndex)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionViewCell", for: indexPath) as! CollectionViewCell
// CollectionViewCell resize to CollectionView Bounds
cell.tableViewCellOffsets = (UIApplication.shared.statusBarFrame.size.height + (self.navigationController?.navigationBar.frame.height ?? 0.0) , self.tabBarController?.tabBar.frame.height ?? 0)
return cell
}
В Tableview numberOfRowsInSection я использую pageIndex для доступа к значениям словаря.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let festivals = dataFromServer?[pageIndex] else {return 0}
return festivals.count
}
С моим текущим кодом приложение отображает 0 строк для некоторых страниц и 1 строку для других. Я предполагаю, что cellForItemAt collectionView вызывается до (также возможно после?) Методов tableView, и это делает использование глобального pageIndex ненадежным ...
Спасибо!