Jak zmienić obraz UIButton w Swift

112

Próbuję zmienić obraz UIButton za pomocą Swift ... Co mam zrobić

To jest kod OBJ-C. Ale nie wiem z Swift:

[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
Lop Hu
źródło

Odpowiedzi:

321

Z twojego kodu Obc-C myślę, że chcesz ustawić obraz dla przycisku, więc spróbuj w ten sposób:

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

W skrócie:

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

Dla Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dharmesh Kheni
źródło
7
powinieneś ustawić buttonWithType na UIButtonType.Custom, a nie na System, dopóki obraz nie pokaże
sazz
8
Dla tych, którzy szukają składni Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

w Swift 4, (Xcode 9) przykład, aby włączyć lub wyłączyć obraz przycisku (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
źródło
9

załóżmy, że to jest twoje połączone UIButton Namepolubienie

@IBOutlet var btn_refresh: UIButton!

Możesz bezpośrednio umieścić swój obraz w trzech trybach

 // 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 działanie przycisku

  //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
źródło
Nie musisz ustawiać przycisku jako gniazdka, jeśli masz akcję dla przycisku. Parametr nadawca przycisku jest odniesieniem do przycisku, więc możesz po prostu wykonać polecenie „let yourButton = sender as! UIButton”, a następnie wprowadzić potrzebne zmiany w przycisku.
Micah Montoya
7

Dla każdego, kto używa Assets.xcassets i Swift 3, wyglądałoby to tak (nie ma potrzeby korzystania z .png)

let buttonDone  = UIButton(type: .Custom)

if let image = UIImage(named: "Done") {
    self.buttonDone.setImage(image, for: .normal)
}
DS.
źródło
6

Od wersji Swift 3.0 stan normalny został usunięty. Możesz użyć następujących, aby zastosować stan normalny.

myButton.setTitle("myTitle", for: [])
PatientC
źródło
5

Preferuję najpierw metodę inicjalizacji moich zmiennych u góry:

let playButton:UIButton!
var image:UIImage!

a następnie ustawiając je w viewDidLoad

override func viewDidLoad {
  ...
  playButton = UIButton(type: .Custom)
  imagePlay = UIImage(named:"play.png")
  playButton.setImage(imagePlay, forState: .Normal)
}
Kristian
źródło
4

Tak, nawet my możemy zmienić obraz UIButton, używając flagi.

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

}

Tutaj po każdym kliknięciu obraz przycisku zmieni się na przemian.

Farkhad Gojazadeh
źródło
2

Swift 5 i zapewnia skalowanie obrazu do rozmiaru przycisku, ale pozostaje w granicach przycisków.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

// Use setBackgroundImage or setImage
yourButton.setBackgroundImage(UIImage(named: "yourImage"), for: .normal)
Alex Marchant
źródło
1

możesz to zrobić, podświetlając przycisk, a za pomocą wskaźnika na prawym pasku narzędzi możesz zaktualizować obraz. oczywiście możesz to zrobić w kodzie, jak wspomniano wcześniej, ale jest to inna opcja dla Ciebie

Richy Garrincha
źródło
To tak naprawdę nie działa. Gdzie aktualizujesz obraz? Jeśli mówisz o różnych stanach, takich jak wyróżnienie, zaznaczenie itp., To tam nie działa,
KFDoom
1

W Swift 4.2 i Xcode 10.1

Dodaj obraz dla wybranego przycisku UIB

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

Ale jeśli chcesz zmienić wybrany obraz przycisku , musisz zmienić jego wybrany stan. Wtedy tylko wybrany obraz pojawi się na twoim przycisku.

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

    }
}
iOS
źródło
1

Szybki 5

yourButton.setImage(UIImage(named: "BUTTON_FILENAME.png"), for: .normal)
Antee86
źródło
0

w wersji swift 3.0 :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Marcelo Gracietti
źródło