Anda perlu menggunakan @objc
atribut on didTapCommentButton(_:)
untuk menggunakannya dengan #selector
.
Anda mengatakan Anda melakukan itu tetapi Anda mendapat kesalahan lain. Dugaan saya adalah bahwa kesalahan baru itu Post
bukan tipe yang kompatibel dengan Objective-C. Anda hanya dapat mengekspos metode ke Objective-C jika semua tipe argumennya, dan tipe kembaliannya, kompatibel dengan Objective-C.
Anda dapat memperbaikinya dengan membuat Post
subkelas dari NSObject
, tetapi itu tidak akan menjadi masalah, karena argumen ke didTapCommentButton(_:)
tidak akan menjadi a Post
. Argumen ke fungsi tindakan adalah pengirim tindakan, dan pengirim itu akan commentButton
, yang mungkin a UIButton
. Anda harus menyatakan didTapCommentButton
seperti ini:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Anda kemudian akan menghadapi masalah mendapatkan yang Post
sesuai dengan tombol yang disadap. Ada banyak cara untuk mendapatkannya. Ini dia.
Saya mengumpulkan (karena kode Anda mengatakan cell.commentButton
) bahwa Anda sedang menyiapkan tampilan tabel (atau tampilan koleksi). Dan karena sel Anda memiliki properti non-standar bernama commentButton
, saya berasumsi bahwa itu adalah UITableViewCell
subkelas khusus . Jadi anggaplah sel Anda PostCell
dinyatakan seperti ini:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Kemudian Anda dapat menjalankan hierarki tampilan dari tombol untuk menemukan PostCell
, dan mendapatkan postingan darinya:
@objc func didTapCommentButton(sender: UIButton) {
var ancestor = sender.superview
while ancestor != nil && !(ancestor! is PostCell) {
ancestor = view.superview
}
guard let cell = ancestor as? PostCell,
post = cell.post
else { return }
// Do something with post here
}