Você precisa usar o @objc
atributo em didTapCommentButton(_:)
para usá-lo com #selector
.
Você diz que fez isso, mas recebeu outro erro. Meu palpite é que o novo erro é que Post
não é um tipo compatível com Objective-C. Você só pode expor um método para Objective-C se todos os seus tipos de argumento, e seu tipo de retorno, forem compatíveis com Objective-C.
Você poderia consertar isso criando Post
uma subclasse de NSObject
, mas isso não fará diferença, porque o argumento para didTapCommentButton(_:)
não será de Post
qualquer maneira. O argumento para uma função de ação é o remetente da ação, e esse remetente será commentButton
, o que é presumivelmente a UIButton
. Você deve declarar didTapCommentButton
assim:
@objc func didTapCommentButton(sender: UIButton) {
// ...
}
Você então enfrentará o problema de obter o Post
correspondente ao botão tocado. Existem várias maneiras de obtê-lo. Aqui está um.
Percebi (já que seu código diz cell.commentButton
) que você está configurando uma visualização de tabela (ou uma visualização de coleção). E como sua célula tem uma propriedade não padrão chamada commentButton
, presumo que seja uma UITableViewCell
subclasse personalizada . Então, vamos supor que sua célula seja PostCell
declarada assim:
class PostCell: UITableViewCell {
@IBOutlet var commentButton: UIButton?
var post: Post?
// other stuff...
}
Em seguida, você pode subir na hierarquia de visualização a partir do botão para encontrar PostCell
e obter a postagem a partir dele:
@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
}