2017-07-18 64 views
6

Yeni UITableViewDropDelegate ve UITableViewDragDelegate delegelerinin kullanıldığı her seferde tek bir öğeyi/hücreyi yeniden sıralamak mümkün olduğunu biliyorum, ancak birden çok işlemi desteklemek mümkün oluyor. UITableView'da bir defada birden çok öğeyi/hücreyi yeniden sıralamak için iOS 11 Sürükle ve Bırak özelliğini kullanmak mümkün mü?

bu ekran Mesela ben tek bir öğe tutuyorum: Dragging a single item/cell

Ve hücreyi bırakarak yere koyar. Ben birden çok hücre kapmak zaman

Ancak girilmez işareti olsun ve hücreler yeniden düzenlemek alışkanlık: Multiple selection Drag and Drop with no entry sign

Eğer iMessage üzerinden birden çok ileti sürükleyerek örneğin iyi çalışıyor başka bir uygulamanın birden çok öğe,: Multiple selection Drag and Drop from iMessage

Tablo görünümünü yalnızca yerel öğelerle yeniden sıralarken, daha hızlı yeniden sipariş verebilmek için bunu yapmak mümkün müdür?

UITableViewDragDelegate

extension DotViewController: UITableViewDragDelegate { 
    func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { 
     return [getDragItem(forIndexPath: indexPath)] 
    } 

    func tableView(_ tableView: UITableView, itemsForAddingTo session: UIDragSession, at indexPath: IndexPath, point: CGPoint) -> [UIDragItem] { 
     return [getDragItem(forIndexPath: indexPath)] 
    } 

    func getDragItem(forIndexPath indexPath: IndexPath) -> UIDragItem { 
     // gets the item 
    } 
} 

UITableViewDropDelegate

extension DotViewController: UITableViewDropDelegate { 
    func tableView(_ tableView: UITableView, canHandle session: UIDropSession) -> Bool { 
     return true 
    } 

    func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal { 
     return UITableViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath) 
    } 

    func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) { 
     // Handles Drop 
    } 
} 

viewDidLoad

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.dataSource = self 
    tableView.delegate = self 
    tableView.dragDelegate = self 
    tableView.dropDelegate = self 

    tableView.dragInteractionEnabled = true 
} 

cevap

1

It en po: Burada

benim kodudur sürüklenen delege aracınız aracılığıyla seçilen tüm hücrelere başvuru sağlayarak çok satırlı yeniden sıralama yapabilmenizi sağlar (ör. bir dizi section.row'un ardından tableView uygulamasını gerçekleştirin: performDropWith: Onları yeniden sıralamak için Coordinator ile birlikte. (: .Sonsuz, niyet: operasyon .insertAtDestinationIndexPath) Eğer UITableViewDropProposal bir damla önerisini döndürerek yeniden sıralama desteklemek istiyorsanız

(bunu bildiğini sanıyorum) daha sonra çalışması için: moveRowAt yüzden UIKit öncesi iOS 11 tableView kullanır Bu sadece tek bir satırı destekler.

Tablo görünümü moveRowAt Index IndexPath. Yeniden sıralama özelliğini desteklemek için Sürükle ve Bırak'ı kullanarak bunu uygulamaya devam edebilirsiniz. Tablo görünümü, aslında çağrı yerine, koordinatörü kullanarak bırakma işlemini gerçekleştirecek olduğundan, bu sihirli bırakma teklifini döndürdüyseniz ve tek bir satır aslında yeniden düzenleniyorsa.

Kaynak: https://developer.apple.com/videos/play/wwdc2017/223/?time=1836

+0

sen nasıl uygulanabileceğini çok sıralı yeniden sıralama açıklık getirebilir? UITableViewDragDelegate yerine alt düzey sürükleme temsilci yöntemleri mi uyguluyorsunuz? –