Indexpath der Schaltfläche von UICollectionView
Versuchte ich zu:
- (IBAction)delete:(UIButton*)sender{
NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]];
}
Aber NSLog zeigt, dass die Zelle vorhanden ist, aber indexpath ist null.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, hier ist es:
Manchmal ist es die einfachste mögliche Antwort. Ich hatte genau das gleiche problem wie @Schmidt, war aber frustriert, zu sehen, dass seine Antwort war indexPathForItemAtPoint:,, als ob indexPathForCell: war irgendwie gebrochen und konnte nicht verwendet werden, wie beabsichtigt.
Dann habe ich versucht, seine Lösung, und noch hatte das gleiche Ergebnis: die index-Pfad zurückgekehrt war gleich null.
Lösung: die view-controller ist collectionView Steckdose nicht angeschlossen, um die UICollectionView Instanz in die Spitze (auf der Zeitachse). Nachdem Sie die fehlende Verbindung, die beide Methoden (indexPathForCell: und indexPathForItemAtPoint) funktionierte wie erwartet.
Ich kenne andere Entwickler auf dieses problem stoßen, manchmal, so nehmen Sie dies als eine Erinnerung: das problem kann nicht dein code, pro se, aber eher etwas im Interface Builder wie eine nicht angeschlossene Steckdose (oder einfach nur als unübersichtlich, einer Steckdose verbunden zu etwas, das nicht mehr existiert).
Swift version der Antwort
Anderen beste Weg, um eine Unterklasse der UIButton, und fügen Sie ein NSIndexPath Eigenschaft.
Beim laden der Zelle
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
Methodediese Anweisung hinzufügen.
yourCell.customButton.indexPath = indexPath;
Und