Вам потрібно скористатися @objc атрибут , didTapCommentButton(_:)щоб використовувати його з#selector .
Ви кажете, що зробили це, але отримали ще одну помилку. Я здогадуюсь, що нова помилка полягає в тому, що Postце не тип, сумісний з Objective-C. Ви можете відкрити метод на Objective-C лише у тому випадку, якщо всі його типи аргументів та його тип повернення сумісні з Objective-C.
Ви можете це виправити, створивши Postпідклас NSObject, але це не має значення, оскільки аргумент доdidTapCommentButton(_:)Post все одно не буде . Аргументом функції дії є відправник дії, і цей відправник буде commentButton, імовірно, a 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
}