Vous devez utiliser l' @objcattribut sur didTapCommentButton(_:)pour l'utiliser avec #selector.
Vous dites que vous avez fait cela, mais vous avez une autre erreur. Je suppose que la nouvelle erreur est que ce Postn'est pas un type compatible avec Objective-C. Vous ne pouvez exposer une méthode à Objective-C que si tous ses types d'argument et son type de retour sont compatibles avec Objective-C.
Vous pouvez résoudre ce problème en créant Postune sous-classe de NSObject, mais cela n'a pas d'importance, car l'argument de didTapCommentButton(_:)ne sera pas un de Posttoute façon. L'argument d'une fonction d'action est l' expéditeur de l'action, et cet expéditeur le sera commentButton, ce qui est vraisemblablement un UIButton. Vous devez déclarer didTapCommentButtoncomme ceci:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Vous serez alors confronté au problème d'obtenir le Postcorrespondant au bouton tapé. Il existe plusieurs façons de l'obtenir. En voici une.
Je suppose (puisque votre code l'indique cell.commentButton) que vous configurez une vue de table (ou une vue de collection). Et comme votre cellule a une propriété non standard nommée commentButton, je suppose que c'est une UITableViewCellsous-classe personnalisée . Supposons donc que votre cellule soit PostCelldéclarée comme ceci:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Ensuite, vous pouvez remonter la hiérarchie des vues à partir du bouton pour trouver le PostCell, et en obtenir le message:
@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
}