2013-07-02 11 views
5

Muszę przeciągnąć komórkę z numeru CollectionView i upuścić ją pod numer CollectionView Two. Przeciągnij & Upuść wewnątrz jednego CollectionView nie jest problemem, ale jak mogę mogę uzyskać Cell z CollectionView One do CollectionView Two?Przeciągnij i upuść między dwoma UICollectionViews

Wszelkie pomysły? Wszelkie projekty lub ramy, które już rozwiązały ten problem? Dzięki za pomoc!

+1

Musisz utworzyć "dummy" komórkę w superview obu widoków kolekcji. tj. jedyny wspólny grunt. Następnie przechwyć, gdzie zostanie przeniesiony i usuń go/dodaj go do widoków kolekcji, jeśli to konieczne. – Fogmeister

Odpowiedz

3

https://github.com/Ice3SteveFortune/i3-dragndrop Sprawdź to - jest to pomocnik, nad którym pracuję, aby to osiągnąć. Wspiera on także tableviews

UPDATE

I niedawno wydała drugą wersję tego kodzie, zwany BetweenKit. Jest to obecnie pełnoprawna struktura "przeciągnij i upuść".

Mam nadzieję, że okaże się przydatny!

1

Po wybraniu komórki z pierwszego widoku kolekcji usuń ją z tego widoku kolekcji, a następnie utwórz nowy widok, ponieważ kopia tej komórki umieszcza ją jako podzbiór widoku nadrzędnego dla wszystkich widoków. Zmodyfikuj ten widok za pomocą gestów pan. Jak tylko "upuść" tę komórkę pośredniczącą, wykryje jej pozycję i doda ją do bieżącego widoku kolekcji.

2

Ok, oto najprostszy przepływu kiedykolwiek na poniższym przykładzie:

enter image description here

  1. Dodaj UIGestureRecognizer dla każdego z UICollectionView.
  2. Połącz każdy rozpoznawania gest z jednej metody:

    @IBAction func longPressGestureChanged(recognizer: UILongPressGestureRecognizer) { ... } 
    
  3. ciągu UIViewController dodać @IBOutlet dla każdego UICollectionView:

    @IBOutlet var collectionViewGreen: UICollectionView! 
    @IBOutlet var collectionViewYellow: UICollectionView! 
    
  4. Implement metodę gest Rozpoznawania do wykrywania zmian:

    @IBAction func longPressGestureChanged(recognizer: UILongPressGestureRecognizer) { 
    
        let globalLocation = recognizer.locationInView(view) 
    
        if CGRectContainsPoint(collectionViewGreen.frame, globalLocation) { 
    
         //you cover green collection view 
         let point = view.convertPoint(globalLocation, toView: collectionViewGreen) 
         if let indexPath = collectionViewGreen.indexPathForItemAtPoint(point) { 
          //you cover cell in green collection view 
         } else { 
          //you do not cover any of cells in green collection view 
         } 
    
        } else if CGRectContainsPoint(collectionViewYellow.frame, globalLocation) { 
    
         //you cover yellow collection view 
         let point = view.convertPoint(globalLocation, toView: collectionViewYellow) 
         if let indexPath = collectionViewYellow.indexPathForItemAtPoint(point) { 
          //you cover cell in yellow collection view 
         } else { 
          //you do not cover any of cells in yellow collection view 
         } 
    
        } else { 
         //you do not cover any of collection views 
        } 
    } 
    
Powiązane problemy