Como alterar a imagem UIButton em Swift

112

Estou tentando mudar a imagem de um UIButton usando Swift ... O que devo fazer

Este é o código OBJ-C. Mas não sei com Swift:

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

Respostas:

321

A partir do seu código Obc-C, acho que você deseja definir uma imagem para o botão, então tente desta forma:

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

Em resumo:

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
fonte
7
você deve definir buttonWithType como UIButtonType.Custom, não como System até que a imagem seja exibida
sazz
8
Para quem procura a sintaxe do Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

em Swift 4, (Xcode 9) exemplo para ativar ou desativar a imagem do botão (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
fonte
9

suponha que este é o seu UIButton Nametipo conectado

@IBOutlet var btn_refresh: UIButton!

você pode colocar sua imagem diretamente em três 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)

na ação do seu botão

  //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
fonte
Você não precisa definir o botão como uma saída se tiver uma ação para o botão. O parâmetro do botão remetente é uma referência ao botão, então você pode simplesmente fazer "let yourButton = sender as! UIButton" e, em seguida, fazer as alterações no botão conforme necessário.
Micah Montoya
7

Para qualquer pessoa que use Assets.xcassets e Swift 3, seria assim (sem necessidade de .png)

let buttonDone  = UIButton(type: .Custom)

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

A partir do Swift 3.0. O estado normal foi removido. Você pode usar o seguinte para aplicar o estado normal.

myButton.setTitle("myTitle", for: [])
Paciente C
fonte
5

Eu prefiro o método de inicializar minhas variáveis ​​no topo primeiro:

let playButton:UIButton!
var image:UIImage!

e configurá-los em viewDidLoad

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

Sim, até podemos mudar a imagem do UIButton, usando o 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)
    }

}

Aqui, após cada clique, a imagem do botão mudará alternadamente.

Farkhad Gojazadeh
fonte
2

O Swift 5 garante que a imagem seja dimensionada para o tamanho do botão, mas permaneça dentro dos limites dos botões.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

você pode fazer isso realçando o botão e dentro do insepctor na barra de ferramentas à direita, você pode atualizar a imagem. obviamente, você pode fazer isso em código também, conforme afirmado anteriormente, mas esta é outra opção para você

Richy Garrincha
fonte
Isso realmente não funciona. Onde você atualiza a imagem? Se você está falando sobre os diferentes estados como destaque, selecionado, etc, não funciona lá,
KFDoom
1

Em Swift 4.2 e Xcode 10.1

Adicionar imagem para o UIButton selecionado

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

Mas se você deseja alterar a imagem do botão selecionado, você precisa alterar seu estado selecionado. Então, apenas a imagem selecionada aparecerá em seu botão.

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

    }
}
iOS
fonte
1

Swift 5

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

em swift 3.0 :

@IBOutlet weak var selectionButton: UIButton!

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