Как изменить изображение UIButton в Swift

112

Я пытаюсь изменить изображение UIButton с помощью Swift ... Что мне делать

Это код OBJ-C, но со Swift я не знаю:

[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
Лоп Ху
источник

Ответы:

321

Из вашего кода 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, а не на System, пока не появится изображение
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)
    }
}
LNVu
источник
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)
}
Анбу.Картик
источник
Вам не нужно настраивать кнопку как выход, если у вас есть действие для кнопки. Отправитель параметра кнопки - это ссылка на кнопку, поэтому вы можете просто сделать «let yourButton = sender as! UIButton», а затем внести необходимые изменения в кнопку.
Мика Монтойя
7

Для всех, кто использует Assets.xcassets и Swift 3, будет так (нет необходимости в .png)

let buttonDone  = UIButton(type: .Custom)

if let image = UIImage(named: "Done") {
    self.buttonDone.setImage(image, for: .normal)
}
DS.
источник
6

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

myButton.setTitle("myTitle", for: [])
PatientC
источник
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

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

    }
}
iOS
источник
1

Swift 5

yourButton.setImage(UIImage(named: "BUTTON_FILENAME.png"), for: .normal)
Antee86
источник
0

в быстрой версии 3.0 :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Марсело Грасетти
источник