Ajouté à partir des commentaires sur une autre réponse : func action() n'est pas seulement un mauvais choix pour le nom et l'action d'une fonction, il ne se construit pas. (Vous pouvez cependant l'utiliser comme paramètre de fonction d'entrée, ce que je fais par souci de clarté lorsque je passe la cible/action à un init() qui définit ces choses). Je le remplace par MonAction() pour plus de clarté.
Essayez ça :
self.addTarget(self, action: #selector(MyAction), for: .touchUpInside)
Cela dit, une meilleure conception consiste à déplacer la fonction MyAction() vers la vue supérieure du bouton, car cela rend les choses plus conformes à la conception MVC de base :
Supervision :
let myButton = ActionButton()
// include other button setup here
myButton.addTarget(self, action: #selector(MyAction), for: .touchUpInside
func action(_ sender: ActionButton) {
// code against button tap here
}
Un codage alternatif pour ceci, en gardant la méthode "action()" dans le contrôleur de vue mais en déplaçant seulement le "addTarget" dans le bouton :
self.addTarget(superview?, action(superview?.MyAction), for: .touchUpInside)
Pourquoi est-ce que je vous demande d'envisager de déplacer la méthode "MyAction()" vers la vue supérieure ? Pour deux raisons :
- Il contrôle non seulement le bouton, mais aussi toutes les autres sous-vues dans sa vue et elles interagissent généralement entre elles via le contrôleur de vue.
- Cela rend le bouton beaucoup plus réutilisable dans d'autres scénarios.