Come cambiare l'immagine di UIButton in Swift


112

Sto cercando di cambiare l'immagine di un UIButton usando Swift ... Cosa devo fare

Questo è il codice OBJ-C. Ma non lo so con Swift:

[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];

Risposte:


321

Dal tuo codice Obc-C penso che tu voglia impostare un'immagine per il pulsante, quindi prova in questo modo:

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

In breve:

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

Per Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)

7
dovresti impostare buttonWithType su UIButtonType.Custom, non su System fino a quando l'immagine non viene visualizzata
sazz

8
Per chi cerca la sintassi di Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos

11

in Swift 4, (Xcode 9) esempio per attivare o disattivare l'immagine del pulsante (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)
    }
}

9

supponi che questo sia il tuo UIButton Nametipo di connessione

@IBOutlet var btn_refresh: UIButton!

puoi posizionare direttamente la tua immagine in tre modalità

 // 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)

sull'azione del pulsante

  //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)
}

Non è necessario impostare il pulsante come presa se si dispone di un'azione per il pulsante. Il parametro mittente del pulsante è un riferimento al pulsante, quindi puoi semplicemente fare "let yourButton = sender as! UIButton" e quindi apportare le modifiche al pulsante secondo necessità.
Micah Montoya

7

Per chiunque utilizzi Assets.xcassets e Swift 3, sarebbe così (non c'è bisogno di .png)

let buttonDone  = UIButton(type: .Custom)

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

6

A partire da swift 3.0. Lo stato normale è stato rimosso. Puoi usare quanto segue per applicare lo stato normale.

myButton.setTitle("myTitle", for: [])

5

Preferisco prima il metodo di inizializzazione delle mie variabili in alto:

let playButton:UIButton!
var image:UIImage!

e quindi impostandoli in viewDidLoad

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

4

Sì, anche noi possiamo cambiare l'immagine di UIButton, usando 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)
    }

}

Qui, dopo ogni clic, l'immagine del pulsante cambierà alternativamente.


2

Swift 5 e garantisce che l'immagine si ridimensiona in base alle dimensioni del pulsante ma rimanga entro i limiti dei pulsanti.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

// Use setBackgroundImage or setImage
yourButton.setBackgroundImage(UIImage(named: "yourImage"), for: .normal)

1

puoi effettivamente farlo evidenziando il pulsante e all'interno dell'insepctor sulla barra degli strumenti di destra puoi aggiornare l'immagine. ovviamente puoi farlo anche in codice come detto in precedenza ma questa è un'altra opzione per te


Questo in realtà non funziona. Dove aggiorni l'immagine? Se stai parlando dei diversi stati come evidenziazione, selezionato, ecc., Non funziona lì,
KFDoom

1

In Swift 4.2 e Xcode 10.1

Aggiungi immagine per UIButton selezionato

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

Ma se vuoi cambiare l'immagine del pulsante selezionato, devi cambiare il suo stato selezionato. Quindi solo l'immagine selezionata apparirà nel tuo pulsante.

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

    }
}

1

Swift 5

yourButton.setImage(UIImage(named: "BUTTON_FILENAME.png"), for: .normal)

0

in swift 3.0 :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.