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];

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)

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

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

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

6

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

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

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

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.


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)

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


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

    }
}

1

Swift 5

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

0

in schnell 3.0 :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.