2012-11-14 14 views
10

Sto utilizzando un UICollectionView nella mia app con riconoscimenti di gesti sulle singole celle che consentono all'utente di "aprire la cella" per rivelare più dati al di sotto.Disabilita il riutilizzo delle celle su UICollectionView

Il problema è che sto ricaricando i dati in CollectionView molto spesso; in quanto l'app riceve aggiornamenti ogni 3 secondi circa. Ciò si traduce in un comportamento indesiderato con le celle della vista di raccolta che vengono riutilizzate mentre una cella è in fase di scorrimento.

L'utente inizierà a far scorrere una cella, l'app riceverà un aggiornamento, reloadData, e una cella diversa inizierà a ricevere il gesto e inizierà a scorrere.

Ho provato a disabilitare gli aggiornamenti dell'app mentre la diapositiva è in corso, ma ciò ha causato altre complicazioni all'interno dell'app, quindi mi chiedo se c'è un modo per disabilitare il riutilizzo delle celle, (avrò solo 20 celle al massimo, quindi non credo che ci sarebbe un calo notevole delle prestazioni).

Grazie!

+1

Hai appena chiamato reloadData? Cosa succede se ricarichi solo celle specifiche, ad es. tutti quelli eccetto quello su cui si sta operando? – jrturton

risposta

2

Perché non utilizzare una bandiera come needsReload e impostarla, se sono disponibili nuovi dati. Dopo una diapositiva controlli questo flag e ricarichi il collectionView, se necessario? Non funziona?

Se non si desidera il riutilizzo delle celle, utilizzare solo una scrollView predefinita e inserire tutte le visualizzazioni in esso !?

-5

La disabilitazione del riutilizzo è semplice. Basta non usare il metodo dequeueReusableCell. Invece basta allocare, inizia le tue celle. Sarei attento alle prestazioni e alle implicazioni della memoria di farlo anche se ...

+0

ho provato che, ho riempito un array con tuttavia molte cellule avevo bisogno, e in cellForRowAtIndexPath metto: 'MyCustomCell * = [cellulari self.arrayOfCells objectAtIndex: indexPath.row];' Ma l'applicazione si blocca con il seguente errore. '*** Errore asserzione in - [UICollectionView _createPreparedCellForItemAtIndexPath: withLayoutAttributes:]' – dKrawczyk

+0

@dKrawczyk: Puoi mostrare il messaggio di errore completo? –

+0

'*** Errore asserzione in - [UICollectionView _createPreparedCellForItemAtIndexPath: withLayoutAttributes:], /SourceCache/UIKit_Sim/UIKit-2372/UICollectionView.m: 1138' – dKrawczyk

Problemi correlati