12
votes

Les cellules UicollectionView restent en surbrillance après ReloadData

J'ai un uicollectionview avec des étiquettes à l'intérieur des cellules qui changent automatiquement périodiquement. Lorsque cette mise à jour déclenche, j'appelle reloaddata sur l'uicollectionview et j'ai défini les cellules pour modifier la couleur d'arrière-plan sur [uicollectionviewcell Sethighlighted:].

Le problème est que si un utilisateur est déposé sur une cellule, la mise à jour se produit lorsque l'utilisateur libère les restes de cellules en surbrillance et ne peut plus être sélectionné.

J'ai remarqué que DEQUUEREUSABLECELLWITHIDIdentifier: ForindexPath: Les appels Sethighlight sur les cellules après Reloaddata.

J'ai aussi essayé rechargetions: au lieu de ReloaderData, cela corrige le problème des cellules 'bloquées', mais provoque une disparition et une disparition sur les cellules lorsque jamais.

Placer les appels à l'intérieur EffectuerBatchUpdates: ne semble pas corriger le problème non plus.


3 commentaires

Avez-vous mis en œuvre le DIDUNHIGHERLLightematidexPath: pour changer la couleur de fond cellulaire ??


Il ne semble pas que la couleur de fond soit définie ou non, la cellule devient toujours désilectable.


Cela semblait empêcher la fondu in / sortant sur rechargections: Stackoverflow.com/a/15068865/667834


5 Réponses :


2
votes

J'ai utilisé ce qui suit comme solution de contournement: xxx


1 commentaires

Cette méthode a fonctionné pour moi - empêchez simplement la vue de la collection à partir de la rechargement tandis qu'un élément est mis en surbrillance et recharger si nécessaire après que l'article ne soit pas immaculé.



0
votes

J'utilise les vues de la collection dans l'un de mes projets récents et le code suivant fonctionne bien pour moi. XXX

dans la sous-classe CollectionviewCell

@Interface SalesLesLeGendcell: Uicollectionviewcell

ci-dessous est le code xxx


0 commentaires

7
votes

à l'intérieur de la classe de la cellule Essayez appeler:

- (void)prepareForReuse {
    [super prepareForReuse];
    [self setHighlighted:NO];
    ... Any other custom stuff that should be cleaned up ...
}


3 commentaires

Nettoyage des trucs personnalisés dans PreyPreyForRuse est évidemment un must-do pour Uicollectionviewcell. Mais je ne voyais pas comment votre réponse aidera à ré-mettre en surbrillance la cellule et à résoudre le problème de la cellule "empilée" après l'appel de ReloadData.


@Alexanderdvornikov: Est-il juste que vous souhaitiez que la cellule reste sélectionnée par l'utilisateur après une recharge? Ou pouvons-nous définir la cellule sur l'état désélectionné et que l'utilisateur doit les sélectionner à nouveau?


Vous avez raison, je m'attends au même comportement que dans UitailView - lorsque la vision de la TableView est rechargée, une cellule pressée doit rester en surbrillance. Fondamentalement, vous pouvez trouver le même bug dans les applications Google Drive ou eBay - lorsque l'utilisateur met en évidence les cellules après la triggete, les recharges de la vue de collecte de contenu et les cellules pressées sont en surbrillance et empilées.



2
votes

J'ai rencontré le même problème dans une vue de collection qui n'avait pas besoin de surbrillance et j'ai remarqué que les méthodes de Didhighlight / DidunHighighlight se sont comportées correctement, donc j'ai fini par bloquer les recharges alors qu'une touche était en cours, en utilisant quelque chose comme ceci:

-(void)CollectionViewRefresh
{
    if(blockColviewUpdate==YES) colviewUpdateQueued=YES;
    else
    {
        colviewUpdateQueued=NO;
        [self.colview reloadData];
    }
}


0 commentaires

0
votes

Peut-être sans lien, mais ce peu moi: uiimage des instances rendues sur un uiviewcollectioncell dans .alway SystemPlate Mode Get par défaut en surbrillance.


0 commentaires