J'ai créé un UIButton avec Swift 3 et je veux qu'il imprime un message lorsqu'il est pressé.
J'ai donc fait quelque chose comme ceci: Dans loadView ()
button.addTarget(self, action: #selector(ViewController.pressButton(button:)), for: .touchUpInside)
Une méthode:
func pressButton(button: UIButton) {
NSLog("pressed!")
}
Mais rien ne se passe lorsque je clique sur le bouton.
Ajoutez le code du bouton dans votre viewDidLoad
et cela fonctionnera pour vous:
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = UIColor.gray
button.addTarget(self, action: #selector(pressButton(button:)), for: .touchUpInside)
self.view.addSubview(button)
}
func pressButton(button: UIButton) {
NSLog("pressed!")
}
Vous n’avez pas besoin d’ajouter ViewController.pressButton
à selector
, c’est suffisant avec le function name
.
Version Swift 4.x:
let button = UIButton(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
button.backgroundColor = .gray
button.tag = 0
button.addTarget(self, action: #selector(pressButton(_:)), for: .touchUpInside)
self.view.addSubview(button)
@objc func pressButton(_ button: UIButton) {
print("Button with tag: \(button.tag) clicked!")
}
essayez ceci dans Swift3!
button.addTarget(self, action: #selector(self.pressButton(button:)), for: .touchUpInside)
@objc func pressButton(button: UIButton) { NSLog("pressed!") }
Utilisez le code suivant.
button.addTarget(self, action: #selector(FirstViewController.cartButtonHandler), for: .touchUpInside)
Le nom de votre classe correspond à FirstViewController
Et votre sélecteur correspond à la fonction suivante
func cartButtonHandler() {
}
Dans Swift 3, utilisez ceci -
object?.addTarget(objectWhichHasMethod, action: #selector(classWhichHasMethod.yourMethod), for: someUIControlEvents)
Par exemple (de mon code) -
self.datePicker?.addTarget(self, action:#selector(InfoTableViewCell.datePickerValueChanged), for: .valueChanged)
Donnez simplement un :
après le nom de la méthode si vous voulez que l'expéditeur soit un paramètre.
let cancelButton = UIButton.init(frame: CGRect(x: popUpView.frame.size.width/2, y: popUpView.frame.size.height-20, width: 30, height: 30))
cancelButton.backgroundColor = UIColor.init(patternImage: UIImage(named: cancelImage)!)
cancelButton.addTarget(self, action: #selector(CommentsViewController.canceled), for:.touchUpInside)
Vous mentionnez que l'appel addTarget
est dans loadView()
. Est-ce que cela se trouve dans votre sous-vue personnalisée ou dans le viewController?
Depuis votre sélecteur, il cible une méthode de votre classe ViewController
, mais si target
pour cette action correspond à la vue elle-même, il serait alors logique que l'action ne se déroule pas.
Si vous déclarez votre bouton dans un viewController et que vous ajoutez la cible viewDidLoad
comme ci-dessus, le message doit alors être imprimé comme vous le souhaitez. Je crois que vous "ciblez" la mauvaise classe avec votre action.
override func viewDidLoad()
Assurez-vous que votre gestionnaire d'actions est identifié avec @IBAction comme ceci:
@IBAction func pressButton (bouton: UIButton) { print ("appuyé!") }
Alors ça va marcher!