From 9d446b4bc31a5644fa72388fff7a210ff4b96cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=89=E7=A7=8B?= <497055328@qq.com> Date: Fri, 10 Jul 2026 11:00:21 +0800 Subject: [PATCH] Fix OTG batch selection cell refresh --- .../WiredCameraTransferViewController.swift | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift b/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift index 908f9fc..1a66d23 100644 --- a/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift +++ b/suixinkan/UI/TravelAlbum/WiredCameraTransferViewController.swift @@ -180,10 +180,7 @@ final class WiredCameraTransferViewController: BaseViewController { withReuseIdentifier: WiredTransferPhotoCell.reuseIdentifier, for: indexPath ) as! WiredTransferPhotoCell - let selected = self?.viewModel.selectedPhotoIds.contains(item.id) == true - cell.apply(item: item, selectionMode: self?.viewModel.selectUploadMode == true, selected: selected) - cell.onRetry = { [weak self] in self?.viewModel.retryPhoto(photoId: item.id) } - cell.onDelete = { [weak self] in self?.confirmDeletePhoto(item.id) } + self?.configurePhotoCell(cell, item: item) return cell } dataSource.supplementaryViewProvider = { [weak self] collectionView, kind, indexPath in @@ -419,6 +416,7 @@ final class WiredCameraTransferViewController: BaseViewController { snapshot.appendItems(section.photos, toSection: currentSections[index]) } dataSource.apply(snapshot, animatingDifferences: true) { [weak self] in + self?.reconfigureVisiblePhotoCells() self?.scrollToPendingTimeSlotIfNeeded() } @@ -486,6 +484,23 @@ final class WiredCameraTransferViewController: BaseViewController { pendingScrollSlotId = nil } + private func configurePhotoCell(_ cell: WiredTransferPhotoCell, item: TravelAlbumOTGPhotoItem) { + let selected = viewModel.selectedPhotoIds.contains(item.id) + cell.apply(item: item, selectionMode: viewModel.selectUploadMode, selected: selected) + cell.onRetry = { [weak self] in self?.viewModel.retryPhoto(photoId: item.id) } + cell.onDelete = { [weak self] in self?.confirmDeletePhoto(item.id) } + } + + private func reconfigureVisiblePhotoCells() { + for indexPath in collectionView.indexPathsForVisibleItems { + guard let cell = collectionView.cellForItem(at: indexPath) as? WiredTransferPhotoCell, + let item = dataSource.itemIdentifier(for: indexPath) else { + continue + } + configurePhotoCell(cell, item: item) + } + } + private func rebuildStats() { statsCard.arrangedSubviews.forEach { view in statsCard.removeArrangedSubview(view)