で使用するには、@objc
属性on didTapCommentButton(_:)
を使用する必要があります#selector
。
あなたはそれをしたと言いますが、あなたは別のエラーを得ました。私の推測では、新しいエラーはPost
Objective-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
}