Necesitas usar el @objc
atributo on didTapCommentButton(_:)
para usarlo #selector
.
Dice que hizo eso, pero recibió otro error. Supongo que el nuevo error es que Post
no es un tipo compatible con Objective-C. Solo puede exponer un método a Objective-C si todos sus tipos de argumentos y su tipo de retorno son compatibles con Objective-C.
Podrías arreglar eso haciendo Post
una subclase de NSObject
, pero eso no va a importar, porque el argumento de didTapCommentButton(_:)
no será de Post
todos modos. El argumento de una función de acción es el remitente de la acción, y ese remitente será commentButton
, que presumiblemente es un UIButton
. Deberías declarar didTapCommentButton
así:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Luego, enfrentará el problema de obtener el Post
botón correspondiente al tocado. Hay varias formas de conseguirlo. Aquí hay uno.
Entiendo (ya que su código dice cell.commentButton
) que está configurando una vista de tabla (o una vista de colección). Y dado que su celda tiene una propiedad no estándar nombrada commentButton
, supongo que es una UITableViewCell
subclase personalizada . Así que supongamos que su celda se PostCell
declara así:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Luego, puede subir la jerarquía de vistas desde el botón para encontrar PostCell
y obtener la publicación de él:
@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
}