Tôi cần một số hành động được thực hiện trên tất cả các ô hiển thị khi chế độ xem bộ sưu tập được tải trước khi nó hiển thị cho người dùng, tôi đã sử dụng:
public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if shouldPerformBatch {
self.collectionView.performBatchUpdates(nil) { completed in
self.modifyVisibleCells()
}
}
}
Hãy chú ý rằng điều này sẽ được gọi khi cuộn qua chế độ xem bộ sưu tập, vì vậy để ngăn chặn chi phí này, tôi đã thêm:
private var souldPerformAction: Bool = true
và trong chính hành động:
private func modifyVisibleCells() {
if self.shouldPerformAction {
// perform action
...
...
}
self.shouldPerformAction = false
}
Hành động sẽ vẫn được thực hiện nhiều lần, vì số lượng ô hiển thị ở trạng thái ban đầu. nhưng trên tất cả các lệnh gọi đó, bạn sẽ có cùng một số ô hiển thị (tất cả chúng). Và cờ boolean sẽ ngăn nó chạy lại sau khi người dùng bắt đầu tương tác với chế độ xem bộ sưu tập.