So ändern Sie das UIButton-Bild in Swift

111

Ich versuche, das Image eines UIButton mit Swift zu ändern ... Was soll ich tun?

Dies ist OBJ-C-Code. Aber ich weiß nicht mit Swift:

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

Antworten:

319

Ich denke, Sie möchten anhand Ihres Obc-C-Codes ein Bild für die Schaltfläche festlegen. Versuchen Sie also Folgendes:

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

Zusamenfassend:

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

Für Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dharmesh Kheni
quelle
7
Sie sollten buttonWithType auf UIButtonType.Custom setzen, nicht auf System, bis das Bild zeigt
sazz
8
Für diejenigen, die nach Swift 3-Syntax suchen: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

in Swift 4 (Xcode 9) Beispiel, um das Bild der Schaltfläche auf Ein oder Aus (btnRec) zu schalten:

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
quelle
9

Nehmen Sie an, dass dies Ihr verbundenes UIButton Namewie ist

@IBOutlet var btn_refresh: UIButton!

Sie können Ihr Bild direkt in drei Modi platzieren

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

auf Ihrer Button-Aktion

  //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
quelle
Sie müssen die Taste nicht als Steckdose einstellen, wenn Sie eine Aktion für die Taste haben. Der Schaltflächenparameter Absender ist eine Referenz auf die Schaltfläche, sodass Sie einfach "Lassen Sie Ihren Button = Absender als! UIButton" ausführen und dann die Änderungen an der Schaltfläche nach Bedarf vornehmen können.
Micah Montoya
7

Für alle, die Assets.xcassets und Swift 3 verwenden, wäre dies der Fall (keine Notwendigkeit für .png).

let buttonDone  = UIButton(type: .Custom)

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

Ab Swift 3.0 wurde der Normalzustand entfernt. Sie können Folgendes verwenden, um den Normalzustand anzuwenden.

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

Ich bevorzuge die Methode, meine Variablen zuerst oben zu initialisieren:

let playButton:UIButton!
var image:UIImage!

und setzen Sie sie dann in viewDidLoad

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

Ja, sogar wir können das Bild von UIButton mithilfe des Flags ändern.

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

}

Hier ändert sich nach jedem Klick alternativ Ihr Schaltflächenbild.

Farkhad Gojazadeh
quelle
2

Swift 5 und stellt sicher, dass das Bild auf die Größe der Schaltfläche skaliert, aber innerhalb der Schaltflächengrenzen bleibt.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

Sie können dies tatsächlich tun, indem Sie die Schaltfläche markieren und innerhalb des Insektors in der rechten Symbolleiste das Bild aktualisieren. Natürlich können Sie dies auch wie zuvor angegeben im Code tun, aber dies ist eine weitere Option für Sie

Richy Garrincha
quelle
Das funktioniert eigentlich nicht. Wo aktualisierst du das Bild? Wenn Sie über die verschiedenen Zustände wie Hervorheben, Ausgewählt usw. sprechen, funktioniert dies dort nicht
KFDoom
1

In Swift 4.2 und Xcode 10.1

Bild für ausgewählten UIButton hinzufügen

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

Wenn Sie jedoch das ausgewählte Schaltflächenbild ändern möchten, müssen Sie den ausgewählten Status ändern. Dann wird nur das ausgewählte Bild in Ihrer Schaltfläche angezeigt.

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

    }
}
iOS
quelle
1

Swift 5

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

in schnell 3.0 :

@IBOutlet weak var selectionButton: UIButton!

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