2013-03-05 4 views
13

Ich versuchteWie können einige Elemente in der UICollectionView nach dem ersten Laden ausgewählt werden?

[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]

und UICollectionViewCell des ausgewählten = YES in viewDidLoad zu schreiben, und es hat die Methode didSelectItemAtIndexPath, aber die Zelle nicht ausgewählt implementiert.

Ich schrieb den ausgewählten Zustand in UICollectionViewCell Unterklasse (void)setSelected:(BOOL)selected. Nachdem die Ansicht geladen wurde, funktioniert die manuelle Auswahl. Aber ich konnte einige Elemente nach dem ersten Laden der Ansicht nicht automatisch auswählen lassen.

Und ich versuchte, Codes zu schreiben, in:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

und

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath, alle nicht in Ordnung.

fand ich es zum ersten Mal ausgeführt viewDidLoad und didSelectItemAtIndexPath, dann cellForItemAtIndexPath, es wie scheint, dass ich die Zelle erhalten in der indexPath could't (die ich kenne) vor cellForItemAtIndexPath, weil vor, dass die Zelle ist nicht vorhanden. So, wie einige Artikel in der UICollectionView nach dem ersten Laden auswählen?

Entschuldigung für mein schlechtes Englisch. Danke im Voraus.

Antwort

11

Nicht sicher, ob haben Ihre Frage richtig, aber hier ist eine mögliche Lösung:

In z.B. viewWillAppear: tun

[self.collectionView reloadData]; 
NSIndexPath *selection = [NSIndexPath indexPathForItem:THE_ITEM_TO_SELECT 
              inSection:THE_SECTION]; 
[self.collectionView selectItemAtIndexPath:selection 
            animated:YES 
          scrollPosition:UICollectionViewScrollPositionNone]; 

Bedenken Sie, dass Aufruf ‚selectItemAtIndexPath‘ programmatisch ruft nicht die damit verbundenen Delegatmethoden; Sie müssen sie in Code aufrufen, wenn Sie sie brauchen.

+2

Vielen Dank! Ich habe es ausgearbeitet! Ich habe immer den falschen Code verwendet: [self collectionView: _tagsCollectionView didSelectItemAtIndexPath: selectedIndexPath] und habe versucht, es überall zu platzieren, nicht den selectItemAtIndexPath, also immer nicht. – zgjie

+0

Wenn meine Ansicht geladen ist, funktioniert diese Methode gut für mich. Aber aus meiner Sicht habe ich Daumen, die automatisch ausgewählt werden – bashan

+0

Und was ist genau dein Problem? Die ursprüngliche Frage betraf die erste Ladung der Ansicht. – SAE

8

In meinem Fall selectItemAtIndexPath hatten keine Wirkung nach reloadData, also musste ich es in der Vollendung Block performBatchUpdates nennen:

collectionView.dataSource = ... 
collectionView.delegate = ... 

let indexPath = ... 

collectionView.performBatchUpdates(nil) { _ in 
    collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None) 
} 
+0

Danke. Ich war in der gleichen Situation, selectItem-Aktion nach reloadData zu machen. Deine Antwort hat mein Problem gelöst. –

4

Swift 3

diese Override-Funktion implementieren, wo ist Ihre Kollektion erstellt . Angenommen, wir haben 1 Abschnitt 1 Reihe wie Instagram Geschichten.

override func viewDidAppear(_ animated: Bool) { 
     // Auto Select First Item 
     self.myCollectionView.performBatchUpdates(nil) { _ in 
      self.myCollectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: false, scrollPosition: [.centeredHorizontally]) 
      self.collectionView(self.myCollectionView, didSelectItemAt : IndexPath(item: 0, section: 0)) 
     } 
    } 
Verwandte Themen