で使用するには、@objc属性on didTapCommentButton(_:)を使用する必要があります#selector。
あなたはそれをしたと言いますが、あなたは別のエラーを得ました。私の推測では、新しいエラーはPostObjective-Cと互換性のあるタイプではないということです。メソッドのすべての引数の型と戻り値の型がObjective-Cと互換性がある場合にのみ、Objective-Cにメソッドを公開できます。
のPostサブクラスを作成することで修正できますが、NSObjectへの引数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
}