Dalam https://developer.apple.com/documents_and_Controls/Coll/ViewS_D_Controls / implementing_modern_collection_views, Apple telah menunjukkan contoh sederhana tentang cara melakukan pemesanan ulang menggunakan DiffableDataSource}

ReorderAndaListViewController.wift.

dataSource.reorderingHandlers.canReorderItem = { item in return true }
dataSource.reorderingHandlers.didReorder = { [weak self] transaction in
    guard let self = self else { return }
    
    // method 1: enumerate through the section transactions and update
    //           each section's backing store via the Swift stdlib CollectionDifference API

    if self.reorderingMethod == .collectionDifference {

        for sectionTransaction in transaction.sectionTransactions {
            let sectionIdentifier = sectionTransaction.sectionIdentifier
            if let previousSectionItems = self.backingStore[sectionIdentifier],
                let updatedSectionItems = previousSectionItems.applying(sectionTransaction.difference) {
                self.backingStore[sectionIdentifier] = updatedSectionItems
            }
        }
    
    // method 2: use the section transaction's finalSnapshot items as the new updated ordering
        
    } else if self.reorderingMethod == .finalSnapshot {

        for sectionTransaction in transaction.sectionTransactions {
            let sectionIdentifier = sectionTransaction.sectionIdentifier
            self.backingStore[sectionIdentifier] = sectionTransaction.finalSnapshot.items
        }
    }
}

Apakah ada cara, untuk membatasi pemesanan ulang hanya dapat dilakukan dalam bagian yang sama?

Tidak banyak yang bisa kita lakukan di reorderingHandlers.canReorderItem, karena parameter penutupan item mengacu pada item sumber saat ini yang kita seret. Tidak ada informasi tentang item tujuan, yang dapat kita bandingkan dengan memutuskan apakah akan mengembalikan true atau false.

0
Cheok Yan Cheng 4 April 2021, 14:40

1 menjawab

Jawaban Terbaik

Perilaku ini bukan pertanyaan untuk sumber data Anda. Ini adalah pertanyaan untuk delegasi Anda

Kamu bisa memakai

Paulw11 5 April 2021, 10:00