Cara mengubah gambar UIButton di Swift

112

Saya mencoba mengubah gambar UIButton menggunakan Swift ... Apa yang harus saya lakukan

Ini adalah kode OBJ-C. Tapi saya tidak tahu dengan Swift:

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

Jawaban:

321

Dari kode Obc-C Anda, saya pikir Anda ingin mengatur tombol Gambar untuk jadi coba cara ini:

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

Pendeknya:

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

Untuk Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dharmesh Kheni
sumber
7
Anda harus mengatur buttonWithType ke UIButtonType.Custom, bukan ke Sistem sampai gambar muncul
sazz
8
Bagi mereka yang mencari sintaks Swift 3: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos
11

di Swift 4, contoh (Xcode 9) untuk mengubah gambar tombol ke On atau Off (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
sumber
9

asumsikan bahwa ini adalah UIButton Namelike Anda yang terhubung

@IBOutlet var btn_refresh: UIButton!

Anda dapat langsung menempatkan gambar Anda dalam tiga mode

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

pada tindakan tombol Anda

  //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
sumber
Anda tidak perlu mengatur tombol sebagai outlet jika Anda memiliki tindakan untuk tombol tersebut. Pengirim parameter tombol adalah referensi ke tombol sehingga Anda dapat melakukan "let yourButton = sender as! UIButton" dan kemudian melakukan perubahan pada tombol sesuai kebutuhan.
Mikha Montoya
7

Untuk siapa pun yang menggunakan Assets.xcassets dan Swift 3, akan seperti ini (tidak perlu .png)

let buttonDone  = UIButton(type: .Custom)

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

Mulai dari swift 3.0. Status normal telah dihapus. Anda dapat menggunakan berikut ini untuk menerapkan status normal.

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

Saya lebih suka metode menginisialisasi variabel saya di atas terlebih dahulu:

let playButton:UIButton!
var image:UIImage!

lalu menyetelnya di viewDidLoad

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

Ya, bahkan kita bisa mengubah gambar UIButton, dengan menggunakan flag.

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

}

Di sini, setelah setiap klik, gambar tombol Anda akan berubah secara bergantian.

Farkhad Gojazadeh
sumber
2

Swift 5 dan memastikan gambar berskala dengan ukuran tombol tetapi tetap dalam batas tombol.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

Anda sebenarnya dapat melakukan ini dengan menyorot tombol dan di dalam insepctor di bilah alat sebelah kanan Anda dapat memperbarui gambar. jelas Anda dapat melakukannya dalam kode juga seperti yang dinyatakan sebelumnya tetapi ini adalah opsi lain untuk Anda

Richy Garrincha
sumber
Ini sebenarnya tidak berhasil. Di mana Anda memperbarui gambar? Jika Anda berbicara tentang negara bagian yang berbeda seperti sorotan, dipilih, dll, itu tidak berfungsi di sana,
KFDoom
1

Di Swift 4.2 dan Xcode 10.1

Tambahkan gambar untuk UIButton yang dipilih

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

Tetapi jika Anda ingin mengubah gambar tombol yang dipilih, Anda perlu mengubah status yang dipilih. Kemudian hanya gambar yang dipilih yang akan muncul di tombol Anda.

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

    }
}
iOS
sumber
1

Cepat 5

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

di 3.0 cepat :

@IBOutlet weak var selectionButton: UIButton!

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