Comment changer l'image UIButton dans Swift

112

J'essaye de changer l'image d'un UIButton en utilisant Swift ... Que dois-je faire

C'est du code OBJ-C mais je ne sais pas avec Swift:

[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
Lop Hu
la source

Réponses:

321

À partir de votre code Obc-C, je pense que vous souhaitez définir une image pour le bouton, alors essayez de cette façon:

let playButton  = UIButton(type: .Custom)
if let image = UIImage(named: "play.png") {
    playButton.setImage(image, forState: .Normal)
}

En bref:

playButton.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal)

Pour Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dharmesh Kheni
la source
7
vous devez définir buttonWithType sur UIButtonType.Custom, pas sur System tant que l'image ne s'affiche pas
sazz
8
Pour ceux qui recherchent la syntaxe Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

dans Swift 4, (Xcode 9) exemple pour activer ou désactiver l'image du bouton (btnRec):

var bRec:Bool = true

@IBOutlet weak var btnRec: UIButton!
@IBAction func btnRec(_ sender: Any) {
    bRec = !bRec
    if bRec {
        btnRec.setImage(UIImage(named: "MicOn.png"), for: .normal)
    } else {
        btnRec.setImage(UIImage(named: "MicOff.png"), for: .normal)
    }
}
LNVu
la source
9

supposons que c'est votre connexion UIButton Namecomme

@IBOutlet var btn_refresh: UIButton!

vous pouvez placer directement votre image dans trois modes

 // for normal state
btn_refresh.setImage(UIImage(named: "xxx.png"), forState: UIControlState.Normal)
     // for Highlighted state
      btn_refresh.setImage(UIImage(named: "yyy.png"), forState: UIControlState.Highlighted)

        // for Selected state
         btn_refresh.setImage(UIImage(named: "zzzz.png"), forState: UIControlState.Selected)

sur l'action de votre bouton

  //MARK: button_refresh action
@IBAction func button_refresh_touchup_inside(sender: UIButton)
{
    //if you set the image on same  UIButton
    sender.setImage(UIImage(named: "newimage.png"), forState: UIControlState.Normal)

    //if you set the image on another  UIButton
       youranotherbuttonName.setImage(UIImage(named: "newimage.png"), forState: UIControlState.Normal)
}
Anbu.Karthik
la source
Vous n'avez pas besoin de définir le bouton comme une prise si vous avez une action pour le bouton. Le paramètre de bouton sender est une référence au bouton, vous pouvez donc simplement faire "laissez votreButton = sender comme! UIButton" et ensuite apporter les modifications nécessaires au bouton.
Micah Montoya
7

Pour quiconque utilise Assets.xcassets et Swift 3, ce serait comme ça (pas besoin de .png)

let buttonDone  = UIButton(type: .Custom)

if let image = UIImage(named: "Done") {
    self.buttonDone.setImage(image, for: .normal)
}
DS.
la source
6

Depuis swift 3.0, l'état normal a été supprimé. Vous pouvez utiliser ce qui suit pour appliquer l'état normal.

myButton.setTitle("myTitle", for: [])
PatientC
la source
5

Je préfère d'abord la méthode d'initialisation de mes variables en haut:

let playButton:UIButton!
var image:UIImage!

puis en les définissant dans viewDidLoad

override func viewDidLoad {
  ...
  playButton = UIButton(type: .Custom)
  imagePlay = UIImage(named:"play.png")
  playButton.setImage(imagePlay, forState: .Normal)
}
Kristian
la source
4

Oui, même nous pouvons changer l'image d'UIButton, en utilisant flag.

class ViewController: UIViewController
{
    @IBOutlet var btnImage: UIButton!
    var flag = false

    override func viewDidLoad()
    {
        super.viewDidLoad()

        //setting default image for button
        setButtonImage()

    }

    @IBAction func btnClick(_ sender: Any)
    {
        flag = !flag
        setButtonImage()
    }

    func setButtonImage(){
        let imgName = flag ? "share" : "image"
        let image1 = UIImage(named: "\(imgName).png")!
        self.btnImage.setImage(image1, for: .normal)
    }

}

Ici, après chaque clic, l'image de votre bouton changera alternativement.

Farkhad Gojazadeh
la source
2

Swift 5 et garantit que l'image s'adapte à la taille du bouton mais reste dans les limites des boutons.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

// Use setBackgroundImage or setImage
yourButton.setBackgroundImage(UIImage(named: "yourImage"), for: .normal)
Alex Marchant
la source
1

vous pouvez réellement le faire en mettant en surbrillance le bouton et dans l'insepctor sur la barre d'outils de droite, vous pouvez mettre à jour l'image. évidemment, vous pouvez le faire dans le code également comme indiqué précédemment, mais c'est une autre option pour vous

Richy Garrincha
la source
Cela ne fonctionne pas vraiment. Où mettez-vous à jour l'image? Si vous parlez des différents états tels que la mise en évidence, la sélection, etc., cela ne fonctionne pas là-bas,
KFDoom
1

Dans Swift 4.2 et Xcode 10.1

Ajouter une image pour l' UIButton sélectionné

button.addTarget(self, action: #selector(self.onclickDateCheckMark), for: .touchUpInside)//Target 
button.setImage(UIImage.init(named: "uncheck"), for: UIControl.State.normal)//When selected
button.setImage(UIImage.init(named: "check"), for: UIControl.State.highlighted)//When highlighted
button.setImage(UIImage.init(named: "check"), for: UIControl.State.selected)//When selected

Mais si vous voulez changer l'image du bouton sélectionné, vous devez changer son état sélectionné. Ensuite, seule l'image sélectionnée apparaîtra dans votre bouton.

@objc func onclickDateCheckMark(sender:UIButton) {
    if sender.isSelected == true {
        sender.isSelected = false
        print("not Selected")
    }else {
        sender.isSelected = true
        print("Selected")

    }
}
iOS
la source
1

Swift 5

yourButton.setImage(UIImage(named: "BUTTON_FILENAME.png"), for: .normal)
Antee86
la source
0

dans swift 3.0 :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Marcelo Gracietti
la source