Comment puis-je personnaliser la sélection de l'état de mon UICollectionViewCell sous-classe?
J'ai un custom UICollectionViewCell sous-classe qui remplace initWithFrame:
et layoutSubviews
pour l'installation de son point de vue. Cependant, je suis maintenant en train de faire deux choses que je vais avoir des ennuis avec.
1) je suis en train de personnaliser l'état de la UICollectionViewCell
lors de la sélection. Par exemple, je veux changer l'une des images dans un UIImageView
dans le UICollectionViewCell
.
2) je veux animer (la lumière de rebond) le UIImage
dans le UICollectionViewCell
.
Quelqu'un peut me pointer dans la bonne direction?
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
MyCollectionViewCell *cell = (MyCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
[cell setSelected:YES];
}
Vous devez vous connecter pour publier un commentaire.
Ajouter une méthode publique
performSelectionAnimations
à la définition deMyCollectionViewCell
que les changements souhaitésUIImageView
et effectue l'animation recherchée. Ensuite l'appeler à partircollectionView:didSelectItemAtIndexPath:
.Donc dans MyCollectionViewCell.m:
Et dans votre
UICollectionViewController
:Avis j'ai pris l'appel à
[cell setSelected:YES]
, depuis que devrait être déjà pris en charge par le UICollectionView. À partir de la documentation:UIImage
swap truc est fait dans une méthode appelée à partir delayoutSubviews
. Devrais-je appelerlayoutSubviews
deperformSelectionAnimations
?layoutSubviews
directement, mais à utilisersetNeedsLayout
oulayoutIfNeeded
à la place. De toute façon,layoutSubviews
sonne comme le mauvais endroit pour le swap+animation des tâches. Le but delayoutSubviews
est de la position des sous-vues si nécessaire, y compris la première fois que la cellule est affiché. Mais vous n'êtes pas le (re)positionnement de choses, et je suppose que vous ne voulez ces tâches effectuées lorsque la cellule est sélectionnée.collectionView?.selectItemAtIndexPath
Dans votre personnalisé UICollectionViewCell sous-classe, vous pourriez remplacer le
setSelected:
de la manière suivante:J'ai trouvé que sur répétées touche cette méthode est appelée sur une cellule, même si c'est déjà sélectionné, de sorte que vous pouvez simplement vérifier que vous êtes vraiment de changement d'état, avant de tirer indésirables des animations.
setSelected
parce que la transition vers/à partir de l'état sélectionné, parfois, ne doit pas être animé (par exemple lorsque la cellule qui a été utilisé pour l'élément sélectionné est réutilisé pour un autres). Il est préférable de s'appuyer sur les animations prévues par l'affichage de la collection elle-même pour(de)selectItemAtIndexPath:animated:
appels avecanimated == YES
.selected
et le chemin d'index de la cellule. Si la valeur précédente deselected
est différent et il y a un chemin d'index, alors vous pouvez animer parce que la cellule est être sélectionné/désactivée par l'action. Sinon, la cellule est réutilisé afin de ne pas les animer.Dans votre personnalisé
UICollectionViewCell
sous-classe, vous pouvez mettre en œuvredidSet
sur leisSelected
propriété.Swift 3:
Swift 2:
if
bloc quand je tape sur la cellule.Si vous souhaitez afficher une animation sur la sélection puis la méthode suivante peut vous aider :
Ne devrait pas mess avec l'état lorsque remplacé dans cette façon: