Sie sollten stattdessen wirklich diese Methode verwenden:
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
Schnelle Version:
let buttonPosition = sender.convert(CGPoint(), to:tableView)
let indexPath = tableView.indexPathForRow(at:buttonPosition)
Dadurch erhalten Sie die indexPath
basierend auf der Position der Taste, die gedrückt wurde. Dann würden Sie einfach anrufen, cellForRowAtIndexPath
wenn Sie die Zelle benötigen oder indexPath.row
wenn Sie die Zeilennummer benötigen.
Wenn Sie paranoid sind, können Sie dies überprüfen, if (indexPath) ...
bevor Sie es verwenden, falls das indexPath
für diesen Punkt in der Tabellenansicht nicht gefunden wird.
Alle anderen Antworten werden wahrscheinlich nicht funktionieren, wenn Apple beschließt, die Ansichtsstruktur zu ändern.
convertPoint:*to*View
nichtconvertPoint:*from*View
. Ich habe Xcode Autocomplete verwendet und am Ende die fromView-Methode verwendet, die nur dazu führte, dass sie nicht funktionierte ...Bearbeiten: Diese Antwort ist veraltet. Bitte verwenden Sie stattdessen diese Methode
Versuche dies:
Bearbeiten: Wenn Sie contentView verwenden, verwenden Sie dies stattdessen für buttonCell:
quelle
contentView
Eigenschaft - daher funktioniert diese Lösung nicht wirklich.Ich würde diesen Weg empfehlen, um indexPath einer Zelle abzurufen, die eine benutzerdefinierte Unteransicht hat - ( kompatibel mit iOS 7 sowie allen vorherigen Versionen )
Dies erfordert auch
self.tablview
nicht.Beachten Sie auch den kommentierten Code, der nützlich ist, wenn Sie dasselbe über einen @selector von UIGestureRecognizer wünschen, der Ihrer benutzerdefinierten Unteransicht hinzugefügt wurde.
quelle
Es gibt zwei Möglichkeiten:
@ H2CO3 ist richtig. Sie können das tun, was @ user523234 vorgeschlagen hat, aber mit einer kleinen Änderung, um die UITableViewCellContentView zu berücksichtigen, die zwischen dem UIButton und der UITableViewCell liegen sollte. So ändern Sie seinen Code:
Wenn Sie eine benutzerdefinierte UITableViewCell (Ihre eigene Unterklasse) erstellen, können Sie einfach
self
die IBAction aufrufen. Sie können die IBAction-Funktion mithilfe des Storyboards oder programmgesteuert beim Einrichten der Zelle mit Ihrer Schaltfläche verknüpfen.quelle
Ich
cellForRowAtIndexPath
gehe davon aus, dass Sie der Zelle Schaltflächen hinzufügen. Dann würde ich eine benutzerdefinierte Klassenunterklasse erstellenUIButton
, ein Tag mit dem Namen hinzufügenrowNumber
und diese Daten anhängen, während Sie der Zelle eine Schaltfläche hinzufügen.quelle
UIButton
.tag
ist eine gemeinsame Eigenschaft vonUIView
.Ein anderer einfacher Weg:
Holen Sie sich den Touchpoint in tableView
Dann erhalten Sie den Indexpfad der Zelle am Punkt
Der Indexpfad enthält den Zeilenindex
Der Code lautet:
quelle
Swift 3
Hinweis: Dies sollte wirklich in der oben akzeptierten Antwort enthalten sein , mit der Ausnahme, dass Meta bei solchen Änderungen die Stirn runzelt.
Zwei kleine Kommentare:
quelle
Eine Lösung könnte darin bestehen, das Tag der Übersicht der Schaltfläche oder sogar höher in der Ansichtshierarchie zu überprüfen (wenn sich die Schaltfläche in der Inhaltsansicht der Zelle befindet).
quelle
Ich möchte Code in Kürze teilen -
quelle
In Kürze:
quelle