Вам нужно использовать @objc
атрибут on, didTapCommentButton(_:)
чтобы использовать его #selector
.
Вы говорите, что сделали это, но получили еще одну ошибку. Я предполагаю, что новая ошибка заключается в том, что Post
тип ошибки не совместим с Objective-C. Вы можете предоставить метод Objective-C только в том случае, если все его типы аргументов и его возвращаемый тип совместимы с Objective-C.
Вы можете исправить это, создав Post
подкласс NSObject
, но это не имеет значения, потому что аргумент to didTapCommentButton(_:)
в Post
любом случае не будет . Аргументом функции действия является отправитель действия, и этим отправителем будет commentButton
, предположительно, объект UIButton
. Вы должны объявить didTapCommentButton
так:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Затем вы столкнетесь с проблемой получения Post
соответствующей нажатой кнопки. Есть несколько способов получить его. Вот один.
Я так понимаю (поскольку ваш код говорит cell.commentButton
), что вы настраиваете табличное представление (или представление коллекции). И поскольку ваша ячейка имеет нестандартное свойство с именем commentButton
, я предполагаю, что это настраиваемый UITableViewCell
подкласс. Итак, предположим, что ваша ячейка PostCell
объявлена так:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Затем вы можете пройти вверх по иерархии представлений с помощью кнопки, чтобы найти PostCell
и получить сообщение из него:
@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
}