2012-11-25 3 views
7

Wenn Sie UICollectionView mit allowsMultipleSelection auf JA setzen, sind nur ein Dutzend Elemente auswählbar. UICollectionViewDelegate hört auf zu rufen collectionView:didSelectItemAtIndexPath:.UICollectionView mit Mehrfachauswahl wählt nicht mehr als ein Dutzend Elemente aus

Es scheint sehr zufällig. Sie können einige Elemente auswählen, nach unten blättern, weitere auswählen und zu einem bestimmten Zeitpunkt können Sie keine weiteren Objekte auswählen.

Wenn die Zelle kleiner ist, scheinen Sie mehr Objekte auswählen zu können. Je größer die Zelle, desto weniger Objekte können ausgewählt werden, bevor sie nicht mehr funktionieren.

Antwort

16

Ich habe festgestellt, dass, während meine vorherige Antwort funktioniert, kann es verursacht werden, indem Sie nicht super aufrufen. Während die Dokumentation für UICollectionReusableView dies nicht erwähnt, tut die Dokumentation für UITableViewCell, die die gleiche Methode hat,.

- (void)prepareForReuse 
{ 
    [super prepareForReuse] 
    // Your code here. 
} 

Alte Antwort:


Dies kann ein Problem mit dem UICollectionView sein.

In diesem Fall werden Zellen, die zuvor ausgewählt wurden, erneut verwendet und behalten den ausgewählten Status bei. Die Sammlungsansicht setzt selected nicht auf "NEIN".

Die Lösung ist, die den ausgewählten Zustand in prepareForReuse der Zelle zurückzusetzen:

- (void)prepareForReuse 
{ 
    self.selected = NO; 
} 

Wenn die wiederverwendet Zelle ausgewählt ist, die Auflistungsansicht selected wird auf „ja“ nach prepareForReuse genannt wird.

Dies ist etwas, das die UICollectionView auf eigene Faust tun sollte. Zum Glück ist die Lösung einfach. Leider habe ich eine Menge Zeit damit verbracht, diesen Fehler zu umgehen, indem ich meinen eigenen Auswahlstatus verfolgte. Ich wusste nicht warum es geschah, bis ich an einem anderen Projekt mit kleineren Zellen arbeitete.

+0

Danke, Luke! Ich stimme zu, das fühlt sich an wie ein Fehler, also habe ich es gemeldet: http://openradar.appspot.com/radar?id=2816402 – clozach

+0

@clozach: Ich habe das gerade aktualisiert; Ich denke, es kann dadurch verursacht werden, dass ich nicht super anrufe. Die Dokumentation erwähnt das nicht, aber die Dokumentation für "UITableViewCell" 'prepareForReuse' erwähnt dies. Es kann sich nur um ein Dokumentationsproblem handeln. – Luke