Як змінити зображення UIButton у Swift


111

Я намагаюся змінити образ UIButton за допомогою Swift ... Що мені робити

Це OBJ-C code.but я не знаю зі Swift:

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

Відповіді:


320

З вашого коду Obc-C, я думаю, ви хочете встановити кнопку "Зображення для", тому спробуйте наступним чином:

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

Коротко:

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

Для Swift 3:

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

7
ви повинні встановити buttonWithType на UIButtonType.Custom, а не на Систему, поки зображення не з’явиться
sazz

8
Для тих, хто шукає синтаксис Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Дастін Сенос

11

у прикладі Swift 4, (Xcode 9), щоб увімкнути або вимкнути зображення кнопки (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

припустимо, що це ваше UIButton Nameподібне

@IBOutlet var btn_refresh: UIButton!

Ви можете безпосередньо розмістити зображення в трьох режимах

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

на вашій дії кнопки

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

Вам не потрібно встановлювати кнопку як розетку, якщо у вас є дія для кнопки. Відправник параметра кнопки - це посилання на кнопку, тому ви можете просто зробити "нехай вашButton = відправник як! UIButton", а потім внести зміни до кнопки за потребою.
Міхей Монтоя

7

Для всіх, хто використовує Assets.xcassets та Swift 3, це буде так (не потрібно .png)

let buttonDone  = UIButton(type: .Custom)

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

6

Починаючи з швидкості 3.0. Нормальний стан було видалено. Ви можете використовувати наступне, щоб застосувати нормальний стан.

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

5

Я віддаю перевагу методу ініціалізації моїх змінних в першу чергу:

let playButton:UIButton!
var image:UIImage!

а потім встановити їх у viewDidLoad

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

4

Так, навіть ми можемо змінити зображення UIButton, використовуючи прапор.

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

}

Тут після кожного натискання зображення кнопки змінюватиметься альтернативно.


2

Перемістіть 5 та забезпечте масштабування зображення до розміру кнопки, але залишається в межах кнопок.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

1

ви можете зробити це, виділивши кнопку, а в інспекторі на правій панелі інструментів ви можете оновити зображення. очевидно, ви можете це зробити в коді також, як було сказано раніше, але це інший варіант для вас


Це насправді не працює. Де ви оновлюєте зображення? Якщо ви говорите про різні стани, такі як виділення, вибране тощо, це не працює,
KFDoom

1

У Swift 4.2 та Xcode 10.1

Додати зображення для вибраного UIButton

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

Але якщо ти хочеш змінити вибране зображення кнопки, вам потрібно змінити вибраний стан. Тоді у вашій кнопці з’явиться лише вибране зображення.

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

    }
}

1

Швидкий 5

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.