2012-11-25 5 views
7

Quando si utilizza un UICollectionView con allowsMultipleSelection impostato su SÌ, è possibile selezionare una dozzina di elementi. UICollectionViewDelegate smette di chiamare collectionView:didSelectItemAtIndexPath:.UICollectionView con selezione multipla non selezionerà più di una dozzina di elementi

Sembra molto casuale. È possibile selezionare alcuni elementi, scorrere verso il basso, selezionare un po 'di più e ad un certo punto non si è in grado di selezionare altri elementi.

Quando la cella è più piccola, sembra che sia possibile selezionare più elementi. Più grande è la cella, meno elementi riesci a selezionare prima che smetta di funzionare.

risposta

16

Ho scoperto che mentre la mia risposta precedente funziona, potrebbe essere causata dal non chiamare super. Mentre la documentazione per UICollectionReusableView non menziona questo, la documentazione per UITableViewCell, che ha lo stesso metodo, fa.

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

Old Risposta:


Questo può essere un bug con il UICollectionView.

Quello che succede è che le celle che sono state precedentemente selezionate vengono riutilizzate e mantengono lo stato selezionato. La vista raccolta non imposta selected su "NO".

La soluzione è reimpostare la lo stato selezionato nella prepareForReuse della cella:

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

Se viene selezionata la cella riutilizzato, la vista raccolta imposterà selected "SI" dopo prepareForReuse è chiamato.

Questo è qualcosa che il UICollectionView dovrebbe fare da solo. Per fortuna la soluzione è semplice. Sfortunatamente ho passato un sacco di tempo a risolvere questo bug seguendo il mio stato di selezione. Non avevo realizzato perché lo era finché non stavo lavorando a un altro progetto con celle più piccole.

+0

Grazie, Luke! Sono d'accordo, mi sembra un bug, quindi l'ho segnalato: http://openradar.appspot.com/radar?id=2816402 – clozach

+0

@clozach: ho appena aggiornato questo; Penso che potrebbe essere causato dal non chiamare super. La documentazione non menziona questo, ma i documenti per 'UITableViewCell''s' prepareForReuse' lo menzionano. Potrebbe essere solo un problema di documentazione. – Luke