UPDATE : Mendapatkan indexPath dari sel yang berisi tombol (bagian dan baris):
Menggunakan Posisi Tombol
Di dalam buttonTapped
metode Anda, Anda dapat mengambil posisi tombol, mengubahnya menjadi koordinat di tableView, lalu mendapatkan indexPath dari baris pada koordinat tersebut.
func buttonTapped(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
}
CATATAN : Kadang-kadang Anda bisa mengalami kasus tepi saat menggunakan view.convert(CGPointZero, to:self.tableView)
hasil fungsi dalam menemukan nil
baris pada suatu titik, meskipun ada sel tableView di sana. Untuk memperbaikinya, coba berikan koordinat nyata yang sedikit diimbangi dari asalnya, seperti:
let buttonPosition:CGPoint = sender.convert(CGPoint.init(x: 5.0, y: 5.0), to:self.tableView)
Jawaban Sebelumnya: Menggunakan Properti Tag (hanya mengembalikan baris)
Daripada naik ke pohon superview untuk mengambil penunjuk ke sel yang menahan tombol UIButton, ada teknik yang lebih aman dan dapat diulang dengan menggunakan properti button.tag yang disebutkan oleh Antonio di atas, dijelaskan dalam jawaban ini , dan ditunjukkan di bawah ini:
Di cellForRowAtIndexPath:
Anda mengatur properti tag:
button.tag = indexPath.row
button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
Kemudian, dalam buttonClicked:
fungsinya, Anda mereferensikan tag itu untuk mengambil baris indexPath tempat tombol berada:
func buttonClicked(sender:UIButton) {
let buttonRow = sender.tag
}
Saya lebih suka metode ini karena saya telah menemukan bahwa berayun di pohon superview bisa menjadi cara yang berisiko untuk mendesain aplikasi. Juga, untuk tujuan-C saya telah menggunakan teknik ini di masa lalu dan senang dengan hasilnya.