Swift'de UIButton görüntüsü nasıl değiştirilir


112

Swift kullanarak bir UIButton'un görüntüsünü değiştirmeye çalışıyorum ... Ne yapmalıyım

Bu OBJ-C kodu. Ama Swift ile bilmiyorum:

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

Yanıtlar:


321

Obc-C kodunuzdan buton için bir Resim ayarlamak istediğinizi düşünüyorum, bu yüzden şu yolu deneyin:

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

Kısacası:

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

Swift 3 için:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)

7
buttonWithType'ı UIButtonType olarak ayarlamalısınız.Özel, görüntü gösterene kadar System'e değil
sazz

8
Swift 3 sözdizimini arayanlar için: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos

11

Swift 4'te, (Xcode 9) düğmenin resmini Açık veya Kapalı duruma getirme örneği (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)
    }
}

9

bunun senin UIButton Namegibi bağlı olduğunu varsay

@IBOutlet var btn_refresh: UIButton!

resminizi doğrudan üç moda yerleştirebilirsiniz

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

senin düğme eyleminde

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

Düğme için bir işleminiz varsa düğmeyi çıkış olarak ayarlamanıza gerek yoktur. Düğme parametresi göndericisi, düğmeye bir referanstır, bu nedenle "düğmenizin gönderici olarak! UIButton'a izin ver" işlemini gerçekleştirebilir ve ardından düğmedeki değişiklikleri gerektiği gibi yapabilirsiniz.
Micah Montoya

7

Assets.xcassets ve Swift 3'ü kullanan herkes için böyle olurdu (.png'ye gerek yok)

let buttonDone  = UIButton(type: .Custom)

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

6

Hızlı 3.0'dan itibaren .normal durumu kaldırılmıştır. Normal durumu uygulamak için aşağıdakileri kullanabilirsiniz.

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

5

Değişkenlerimi ilk olarak en üstte başlatma yöntemini tercih ederim:

let playButton:UIButton!
var image:UIImage!

ve sonra bunları viewDidLoad'da ayarlama

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

4

Evet, bayrak kullanarak UIButton'un görüntüsünü bile değiştirebiliriz.

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

}

Burada, her tıklamadan sonra düğme resminiz alternatif olarak değişecektir.


2

Swift 5 ve görüntünün düğme boyutuna göre ölçeklenmesini ancak düğme sınırları içinde kalmasını sağlar.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

1

bunu aslında düğmeyi vurgulayarak yapabilirsiniz ve sağ taraftaki araç çubuğundaki insepctor içinde resmi güncelleyebilirsiniz. açıkçası bunu daha önce belirtildiği gibi kodla da yapabilirsiniz, ancak bu sizin için başka bir seçenektir


Bu aslında işe yaramıyor. Resmi nerede güncelliyorsunuz? Vurgu, seçili vb. Gibi farklı durumlardan bahsediyorsanız, orada çalışmaz
KFDoom

1

Swift 4.2 ve Xcode 10.1'de

Seçili UIB düğmesi için resim ekle

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

Ancak seçili düğme görüntüsünü değiştirmek isterseniz, seçili durumunu değiştirmeniz gerekir. Ardından düğmenizde yalnızca seçilen resim görünecektir.

@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

hızlı 3.0'da :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.