Cómo cambiar la imagen de UIButton en Swift

111

Estoy tratando de cambiar la imagen de un UIButton usando Swift ... ¿Qué debo hacer?

Este es el código OBJ-C. Pero no lo sé con Swift:

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

Respuestas:

320

Desde su código Obc-C, creo que desea establecer una imagen para el botón, así que intente de esta manera:

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

En breve:

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

Para Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dharmesh Kheni
fuente
7
debe configurar buttonWithType en UIButtonType.Custom, no en System hasta que se muestre la imagen
sazz
8
Para aquellos que buscan la sintaxis de Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

en Swift 4, (Xcode 9) ejemplo para activar o desactivar la imagen del botón (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
fuente
9

Asume que este es tu UIButton Namecomo conectado

@IBOutlet var btn_refresh: UIButton!

puedes colocar directamente tu imagen en tres modos

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

en la acción de tu botón

  //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
fuente
No es necesario configurar el botón como una salida si tiene una acción para el botón. El remitente del parámetro del botón es una referencia al botón, por lo que puede hacer "dejar yourButton = sender como! UIButton" y luego hacer los cambios en el botón según sea necesario.
Micah Montoya
7

Para cualquiera que use Assets.xcassets y Swift 3, sería así (sin necesidad de .png)

let buttonDone  = UIButton(type: .Custom)

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

A partir de swift 3.0, se ha eliminado el estado normal. Puede utilizar lo siguiente para aplicar el estado normal.

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

Prefiero el método de inicializar mis variables en la parte superior primero:

let playButton:UIButton!
var image:UIImage!

y luego configurándolos en viewDidLoad

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

Sí, incluso podemos cambiar la imagen de 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)
    }

}

Aquí, después de cada clic, la imagen de su botón cambiará alternativamente.

Farkhad Gojazadeh
fuente
2

Swift 5 y garantiza que la imagen se adapte al tamaño del botón pero se mantenga dentro de los límites de los botones.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

en realidad, puede hacer esto resaltando el botón y dentro del insepctor en la barra de herramientas de la derecha puede actualizar la imagen. obviamente, también puede hacerlo en código como se indicó anteriormente, pero esta es otra opción para usted

Richy Garrincha
fuente
En realidad, esto no funciona. ¿Dónde actualizas la imagen? Si habla de los diferentes estados como resaltado, seleccionado, etc., no funciona allí,
KFDoom
1

En Swift 4.2 y Xcode 10.1

Agregar imagen para el botón UIB seleccionado

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

Pero si desea cambiar la imagen del botón seleccionado , debe cambiar su estado seleccionado. Entonces solo la imagen seleccionada aparecerá en su botón.

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

    }
}
iOS
fuente
1

Rápido 5

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

en swift 3.0 :

@IBOutlet weak var selectionButton: UIButton!

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