7
votes

IndexPath du bouton de Uicollectionview

J'ai essayé de:

- (IBAction)delete:(UIButton*)sender{
    NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]];
}


0 commentaires

4 Réponses :


26
votes

OK, voici:

- (IBAction)delete:(UIButton *)sender{
    NSIndexPath *indexPath = nil;
    indexPath = [self.collectionView indexPathForItemAtPoint:[self.collectionView convertPoint:sender.center fromView:sender.superview]];
}


2 commentaires

Bien que c'était utile;)


Bonne réponse continuez



0
votes

Un autre meilleur moyen est de sous-classer l'UIBTTON et d'ajouter une propriété NsindexPath. Lors du chargement de la cellule en
- (uicollectionviewcell *) CollectionView: (Uicollectionvoyer *) CollectionView CellfeMatindIndExpath: (NsindexPath *) IndustryPath Méthode Ajoutez cette déclaration. yycell.cusombutton.indexpath = indexpath;

et xxx


0 commentaires

2
votes

Parfois, c'est la réponse la plus simple possible. J'avais exactement le même problème que @schmidt, mais j'ai frustré de voir que sa réponse était d'utiliser indexpathforitematPoint :, comme si indexpathorforcell: était en quelque sorte cassé et ne pouvait pas être utilisé comme prévu.

Puis j'ai essayé sa solution et j'ai toujours le même résultat: le chemin d'index revenait nul.

Solution: la sortie de la collection de contrôleur d'affichage n'a pas été connectée à l'instance Uicollectionview de la NIB (sur le storyboard). Après avoir effectué cette connexion manquante, les deux méthodes (IndexPathForCell: et IndexPathforitematematematematematematematematematematematematemat).

Je sais que d'autres devs rencontrent parfois ce problème, alors prenez-le comme un rappel: le problème peut ne pas être votre code, en soi, mais plutôt quelque chose dans le constructeur d'interface comme un point de vente non connecté (ou tout simplement confus, Un point de vente qui est connecté à quelque chose qui n'existe plus ).


1 commentaires

Oui! Cela a fonctionné pour moi, bien que le niveau de la nidification de Superview dans le code de l'OP dépend de votre point de vue. Beaucoup peut être accompli avec moins de code si vous enquêtez de manière approfondie des storyboards prenant en charge. Très bon conseil.



1
votes

Version SWIFT de la réponse

var indexPath: IndexPath? = nil
indexPath = collectionView.indexPathForItem(at: collectionView.convert(sender.center, from: sender.superview))


0 commentaires