Как получить доступ к определенной ячейке в UICollectionView в обратном вызове ячейки willDisplay - PullRequest
0 голосов
/ 05 сентября 2018

РЕДАКТИРОВАТЬ: Общая картина: я пытаюсь построить временную шкалу следующим образом: enter image description here Каждая ячейка на временной шкале представляет месяц, поэтому май - последняя ячейка в горизонтальном CollectionView. Я хочу, чтобы при загрузке collectionView он автоматически прокручивался до, если он еще не виден, затем вызывает определенную функцию в ячейке, чтобы нарисовать стрелку. Код, который я использую, чтобы попытаться сделать это, приведен ниже.

Вот мой код:

var onceOnlyCollectionView = false
var onceOnlyTimeline = false
internal func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    if collectionView == self.collectionView {
        if !onceOnlyCollectionView {
            let indexToScrollTo = IndexPath(row: self.posts.count - 1, section: 0)
            collectionView.scrollToItem(at: indexToScrollTo, at: .left, animated: false)
            onceOnlyCollectionView = true
        }
    } else if collectionView == self.timeline {
        if !onceOnlyTimeline {
            let firstPost = posts.first?.timeStamp
            let firstOfFirstMonth = firstPost?.startOfMonth()
            let diff = posts.last?.timeStamp.months(from: firstOfFirstMonth!)
            //self.currentPostMonth = diff
            let monthCellIndexPath = IndexPath(row: diff!, section: 0)
            timeline.scrollToItem(at: monthCellIndexPath, at: .centeredHorizontally, animated: false)
            let months = self.posts.first?.timeStamp.startOfMonth().months(from: (self.posts.last?.timeStamp)!)
            print("cells are",self.timeline.visibleCells)
            if let optionalCell = timeline.cellForItem(at: IndexPath(row: months!, section: 0)) {
                let cell = optionalCell as! TimelineMonthViewCell
                let day = Calendar.current.component(.day, from: self.currentPostDate!)
                cell.drawArrow(day: day)
            } else {
                print("cell out of range")
            }
            onceOnlyTimeline = true
        }
    }
}

Прямо сейчас он успешно прокручивается до мая, однако печатает «ячейки []» и «ячейка вне диапазона» и не рисует красную стрелку. Что здесь происходит и как я могу получить доступ к этой недавно прокрученной ячейке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...