J'ai essayé de:
- (IBAction)delete:(UIButton*)sender{ NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]]; }
4 Réponses :
OK, voici:
- (IBAction)delete:(UIButton *)sender{ NSIndexPath *indexPath = nil; indexPath = [self.collectionView indexPathForItemAtPoint:[self.collectionView convertPoint:sender.center fromView:sender.superview]]; }
Bien que c'était utile;)
Bonne réponse continuez
Un autre meilleur moyen est de sous-classer l'UIBTTON et d'ajouter une propriété NsindexPath.
Lors du chargement de la cellule en et p>
- (uicollectionviewcell *) CollectionView: (Uicollectionvoyer *) CollectionView CellfeMatindIndExpath: (NsindexPath *) IndustryPath code> Méthode
Ajoutez cette déclaration.
yycell.cusombutton.indexpath = indexpath; code>
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. P>
Puis j'ai essayé sa solution et j'ai toujours le même résultat: le chemin d'index revenait nul. P>
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). P>
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 em>). p>
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.
Version SWIFT de la réponse
var indexPath: IndexPath? = nil indexPath = collectionView.indexPathForItem(at: collectionView.convert(sender.center, from: sender.superview))