Я использую пользовательский UICollectionView с пользовательским UICollectionViewCell:NumberOfItemsInSection вызывается перед CellForItemAt
class SelectTimeViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, SliderDelegate {
@IBOutlet weak var collectionViewSlider: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
collectionViewSlider?.register(DayCollectionViewCell.self, forCellWithReuseIdentifier: "cell")
collectionViewSlider.dataSource = self
collectionViewSlider.delegate = self
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("*\(indexPath.row)")
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! DayCollectionViewCell
cell.tag = indexPath.row
return cell
}
}
class DayCollectionViewCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate {
override init(frame: CGRect) {
super.init(frame: frame)
setupDayTimeline(width: frame.width, height: frame.height)
}
func setupDayTimeline(width: CGFloat, height: CGFloat) {
let appsCollectionView: UICollectionView = {
let collectionView = UICollectionView(frame: CGRect(x: 0, y: 30, width: width, height: height - 30), collectionViewLayout: layout)
return collectionView
}()
addSubview(appsCollectionView)
appsCollectionView.delegate = self
appsCollectionView.dataSource = self
appsCollectionView.register(UINib(nibName: "TimeCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "timecell")
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print(self.tag)
return myArray[self.tag].count
}
}
Но когда я прокручиваю свою UICollectionView и я получаю в консоли: * 0 * 1 * 2
Итак, для последней ячейки функция numberOfItemsInSection от DayCollectionViewCell называется earl y затем cellForItemAt от MyViewController. Как я могу решить эту проблему?
Это не совсем понятно, какова ваша проблема. Кроме того, почему ваш класс ячейки также реализует 'UICollectionViewDataSource'? – Uncommon
Я только что обновил свой код. Проблема: «cell.tag = indexPath.row» вызывается позже, тогда «return myArray [self.tag] .count» и self.tag равно 0 – Kirill
Возможно, вы, вероятно, используете представление коллекции совершенно неправильно. 'CellForItem' будет вызываться всегда после' numberOfItemsInSection', потому что последний задает количество элементов, для которых нужно вызвать 'cellForItem'. PS: * Не используйте теги. * – Sulthan