AKTUALISIEREN : Abrufen des Indexpfads der Zelle, die die Schaltfläche enthält (sowohl Abschnitt als auch Zeile):
Verwenden der Tastenposition
Innerhalb Ihrer buttonTapped
Methode können Sie die Position der Schaltfläche erfassen, sie in eine Koordinate in der Tabellenansicht konvertieren und dann den Indexpfad der Zeile an dieser Koordinate abrufen.
func buttonTapped(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
}
ANMERKUNG : Manchmal kann es vorkommen, dass Sie bei Verwendung der Funktion auf einen Randfall stoßen view.convert(CGPointZero, to:self.tableView)
, nil
um an einem Punkt nach einer Zeile zu suchen, obwohl dort eine tableView-Zelle vorhanden ist. Um dies zu beheben, versuchen Sie, eine echte Koordinate zu übergeben, die leicht vom Ursprung versetzt ist, z.
let buttonPosition:CGPoint = sender.convert(CGPoint.init(x: 5.0, y: 5.0), to:self.tableView)
Vorherige Antwort: Verwenden der Tag-Eigenschaft (gibt nur die Zeile zurück)
Anstatt in die Überwachungsbäume zu klettern, um einen Zeiger auf die Zelle zu erhalten, in der sich der UIButton befindet, gibt es eine sicherere, wiederholbarere Technik, bei der die von Antonio oben erwähnte Eigenschaft button.tag verwendet wird, die in beschrieben ist dieser Antwort gezeigte :
In cellForRowAtIndexPath:
legen Sie die Tag-Eigenschaft fest:
button.tag = indexPath.row
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Anschließend buttonClicked:
verweisen Sie in der Funktion auf dieses Tag, um die Zeile des Indexpfads abzurufen, in der sich die Schaltfläche befindet:
func buttonClicked(sender:UIButton) {
let buttonRow = sender.tag
}
Ich bevorzuge diese Methode, da ich festgestellt habe, dass das Schwingen in den Übersichtsbäumen eine riskante Möglichkeit sein kann, eine App zu entwerfen. Auch für Ziel-C habe ich diese Technik in der Vergangenheit verwendet und war mit dem Ergebnis zufrieden.