È necessario utilizzare l' @objc
attributo 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 Post
non è 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 Post
una sottoclasse di NSObject
, ma non avrà importanza, perché l'argomento per didTapCommentButton(_:)
non sarà Post
comunque a. L'argomento di una funzione di azione è il mittente dell'azione e tale mittente sarà commentButton
, che presumibilmente è un UIButton
. Dovresti dichiarare in didTapCommentButton
questo modo:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Dovrai quindi affrontare il problema di ottenere il Post
corrispondente 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 UITableViewCell
sottoclasse personalizzata . Quindi supponiamo che la tua cella sia PostCell
dichiarata 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 PostCell
e 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
}