È necessario utilizzare l' @objcattributo su didTapCommentButton(_:)per usarlo con #selector.
Dici di averlo fatto ma hai ricevuto un altro errore. La mia ipotesi è che il nuovo errore sia che Postnon è un tipo compatibile con Objective-C. È possibile esporre un metodo a Objective-C solo se tutti i suoi tipi di argomento e il suo tipo restituito sono compatibili con Objective-C.
Puoi risolverlo creando Postuna sottoclasse di NSObject, ma non avrà importanza, perché l'argomento per didTapCommentButton(_:)non sarà Postcomunque a. L'argomento di una funzione di azione è il mittente dell'azione e tale mittente sarà commentButton, che presumibilmente è un UIButton. Dovresti dichiarare in didTapCommentButtonquesto modo:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Dovrai quindi affrontare il problema di ottenere il Postcorrispondente al pulsante toccato. Esistono diversi modi per ottenerlo. Eccone uno.
Capisco (dal momento che il tuo codice dice cell.commentButton) che stai configurando una vista tabella (o una vista raccolta). E poiché la tua cella ha una proprietà non standard denominata commentButton, presumo sia una UITableViewCellsottoclasse personalizzata . Quindi supponiamo che la tua cella sia PostCelldichiarata come questa:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Quindi puoi risalire la gerarchia di visualizzazione dal pulsante per trovare PostCelle ottenere il post da esso:
@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
}