Je viens de commencer à apprendre Swift . Je suis ce tutoriel Apple mais j'ai rencontré cette erreur. J'ai copié le code exact du tutoriel. Je ne sais pas où je me suis trompé.

Message d'erreur:

"Le type 'RatingControl' n'a aucun membre 'ratingButtonTapped (bouton :)'"

//Mark: Private Methods
private func setupButtons() {
    for _ in 0..<5 {
        //Create the button
        let button = UIButton()
        button.backgroundColor = UIColor.red

        //Add constraints
        button.translatesAutoresizingMaskIntoConstraints = false
        button.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
        button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true

        //Setup the button action
        button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchUpInside)

        //Add the button to the stack
        addArrangedSubview(button)

        //Add the new button to the rating button array
        ratingButtons.append(button)
    }
}
-2
Brandon 17 avril 2020 à 14:27

2 réponses

Meilleure réponse

Initiale pour obtenir l'action du bouton, la classe RatingControl.swift sera comme

import UIKit

@IBDesignable class RatingControl: UIStackView {

    //MARK: Initialization

    override init(frame: CGRect) {
        super.init(frame: frame)
     }

    required init(coder: NSCoder) {
        super.init(coder: coder)
     }

    //MARK: Button Action

   @objc func ratingButtonTapped(button: UIButton) {
        print("Button pressed")
    }

}

Créez un fichier nommé RatingControl.swift avec du code et exécutez votre projet. Ce problème sera résolu.

Si vous avez déjà la classe complète, ajoutez simplement @objc avant la méthode ratingButtonTapped.

Plus d'informations : vous pouvez télécharger le projet complet du didacticiel que vous suivez actuellement. Le lien de téléchargement est présent en bas.

0
Faysal Ahmed 17 avril 2020 à 12:00

Nous avons vraiment besoin de voir toute la classe RatingControl pour vous donner une réponse complète. Cependant, votre problème basé sur l'erreur est qu'il n'y a pas de fonction avec le nom ratingButtonTapped dans votre classe RatingControl. Il devrait y avoir une classe comme celle-ci pour l'enregistrer en tant que cible sur un bouton.

Exemple d'utilisation de .addTarget:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        //Setup the button action
        let button = UIButton()
        button.addTarget(self, action: #selector(ratingButtonTapped(_:)), for: .touchUpInside)
        view.addSubview(button)
    }


    @objc func ratingButtonTapped(sender: UIButton) {
       // Triggered when the button is pressed
    }
}
0
Nick 17 avril 2020 à 11:47