ios - 如何在 willDisplay 单元格回调中访问 UICollectionView 中的特定单元格

标签 ios swift uiscrollview uicollectionview

编辑:大局:我正在尝试建立一个像这样的时间表: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
        }
    }
}

现在,它确实成功滚动到可能,但是它打印“单元格是[]”和“单元格超出范围”并且不绘制红色箭头。这里发生了什么以及如何访问这个新滚动到的单元格?

最佳答案

您可以像这样简单地访问 Collection View 的特定单元格

override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {

        if let cell = cell as? MyListingsCollectionViewCell {
            if isStuffAdded {
                //do something you want
            }
        }

}

关于ios - 如何在 willDisplay 单元格回调中访问 UICollectionView 中的特定单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191245/

相关文章:

ios - uiscrollview 放大和缩小不能正常工作

ios - XCode 8:缺少“自动管理签名”选项

ios - 禁用将拍摄或选择的图像保存到相机胶卷

ios - 带分页的 ScrollView

ios - UIScrollView drawRect 中的自定义 UIView 从未调用过

ios - NIB 文件中的 ScrollView Swift

ios - dispatch_after 错误 : '[AnyObject]?' is not a subtype of 'Void'

ios - Pod 规范验证 Cocoa Pod 问题

ios - 如果 index.row 在我的数组中,则为单元格设置图像

iOS:如何在 Swift [NSString] 中显示特殊字符