Вам потрібно скористатися @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
}