web-dev-qa-db-fra.com

Swift3: bouton Ajouter avec code

Je lis la documentation d'Apple Swift (iOS) mais elle est écrite pour Swift 2 et j'utilise Swift 3. Je souhaite ajouter un bouton par programmation, mais il semble y avoir un changement et je ne trouve pas comment le réparer.

Voici le code pour l'exemple de Swift 2:

import UIKit

class RatingControl: UIView {

// MARK: Initialization

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    // Buttons
    let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
    button.backgroundColor = UIColor.red()
    button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), forControlEvents: .TouchDown)
    addSubview(button)
}

override func intrinsicContentSize() -> CGSize {
    return CGSize(width: 240, height: 44)
}

// MARK: Button Action

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

Le seul changement que j'ai apporté après que le correctif a montré l'erreur est celle-ci dans le sélecteur:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(button:)), for: .touchDown)

Cela aurait dû imprimer "Bouton enfoncé" mais pas. De l'aide?

9
pRivaT3 BuG

Mon code:

button.backgroundColor = UIColor.red

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)

override var intrinsicContentSize : CGSize {
//override func intrinsicContentSize() -> CGSize {
    //...
    return CGSize(width: 240, height: 44)
}

// MARK: Button Action
func ratingButtonTapped(_ button: UIButton) {
    print("Button pressed ????")
}
20
Vũ Đình Thuần

Essayez quelque chose comme ça. Je n'ai pas testé mais ça devrait marcher:

let button = UIButton(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
button.backgroundColor = UIColor.red
button.addTarget(self, action: #selector(ratingButtonTapped), for: .touchUpInside)
addSubview(button)

func ratingButtonTapped() {
    print("Button pressed")
}
13
axel

Trouvé la solution. Pour une raison quelconque, le:

func ratingButtonTapped(button: UIButton)

nécessite un "_" avant le bouton. Donc ça devrait être:

func ratingButtonTapped(_ button: UIButton)

Et l'autre partie du code doit être:

button.addTarget(self, action: #selector(RatingControl.ratingButtonTapped(_:)), for: .touchDown)

Merci de votre aide :) Votre méthode est peut-être également correcte, mais c'est celle que Apple veut.

2
pRivaT3 BuG