Musisz użyć @objcatrybutu on, didTapCommentButton(_:)aby użyć go z #selector.
Mówisz, że to zrobiłeś, ale pojawił się kolejny błąd. Domyślam się, że nowy błąd Postnie jest typem zgodnym z Objective-C. Metodę można uwidocznić w celu-C tylko wtedy, gdy wszystkie jej typy argumentów i typ zwracany są zgodne z celem-C.
Możesz to naprawić, tworząc Postpodklasę NSObject, ale to nie będzie miało znaczenia, ponieważ argument do didTapCommentButton(_:)i Posttak nie będzie . Argumentem funkcji akcji jest nadawca akcji, a tym nadawcą będzie commentButton, prawdopodobnie UIButton. Powinieneś zadeklarować w didTapCommentButtonten sposób:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Będziesz wtedy musiał stawić czoła problemowi uzyskania Postodpowiedniego przycisku. Jest na to wiele sposobów. Tu jest jeden.
Rozumiem (ponieważ twój kod mówi cell.commentButton), że konfigurujesz widok tabeli (lub widok kolekcji). A ponieważ twoja komórka ma niestandardową właściwość o nazwie commentButton, zakładam, że jest to niestandardowa UITableViewCellpodklasa. Załóżmy więc, że twoja komórka jest PostCellzadeklarowana w ten sposób:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Następnie możesz przejść w górę hierarchii widoków od przycisku, aby znaleźć PostCelli pobrać z niego wpis:
@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
}