Cách thay đổi hình ảnh UIButton trong Swift


111

Tôi đang cố gắng thay đổi hình ảnh của UIButton bằng Swift ... Tôi nên làm gì

Đây là mã OBJ-C. Nhưng tôi không biết với Swift:

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

Câu trả lời:


320

Từ mã Obc-C của bạn, tôi nghĩ bạn muốn đặt nút Hình ảnh cho nên hãy thử theo cách này:

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

Nói ngắn gọn:

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

Đối với Swift 3:

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

7
bạn nên đặt buttonWithType để UIButtonType.Custom, không để hệ thống cho đến khi chương trình hình ảnh
sazz

8
Đối với những người tìm kiếm Swift 3 cú pháp: playButton.setImage(UIImage(named: "play.png"), for: .normal)
Dustin Senos

11

trong Swift 4, (Xcode 9) ví dụ để chuyển hình ảnh của nút thành Bật hoặc Tắt (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

giả sử rằng đây là kết nối của bạn UIButton Namenhư

@IBOutlet var btn_refresh: UIButton!

bạn có thể đặt trực tiếp hình ảnh của mình ở ba chế độ

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

về hành động nút của bạn

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

Bạn không cần đặt nút làm ổ cắm nếu bạn có thao tác đối với nút. Người gửi tham số nút là một tham chiếu đến nút nên bạn có thể chỉ cần thực hiện "let yourButton = sender as! UIButton" và sau đó thực hiện các thay đổi đối với nút nếu cần.
Micah Montoya

7

Đối với bất kỳ ai sử dụng Assets.xcassets và Swift 3, nó sẽ như thế này (không cần .png)

let buttonDone  = UIButton(type: .Custom)

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

6

Kể từ phiên bản nhanh 3.0, trạng thái bình thường đã bị loại bỏ. Bạn có thể sử dụng phần sau để áp dụng trạng thái bình thường.

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

5

Tôi thích phương pháp khởi tạo các biến của mình ở trên cùng trước:

let playButton:UIButton!
var image:UIImage!

và sau đó đặt chúng trong viewDidLoad

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

4

Có, thậm chí chúng ta có thể thay đổi hình ảnh của UIButton bằng cách sử dụng cờ.

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

}

Tại đây, sau mỗi lần nhấp, hình ảnh nút của bạn sẽ thay đổi theo cách khác.


2

Swift 5 và đảm bảo tỷ lệ hình ảnh theo kích thước của nút nhưng vẫn nằm trong giới hạn của nút.

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

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

1

bạn thực sự có thể thực hiện việc này bằng cách tô sáng nút và trong thanh công cụ bên phải, bạn có thể cập nhật hình ảnh. rõ ràng bạn có thể làm điều đó trong mã cũng như đã nêu trước đây nhưng đây là một tùy chọn khác cho bạn


Điều này thực sự không hoạt động. Bạn cập nhật hình ảnh ở đâu? Nếu bạn đang nói về các trạng thái khác nhau như đánh dấu, đã chọn, v.v., thì nó không hoạt động ở đó,
KFDoom

1

Trong Swift 4.2 và Xcode 10.1

Thêm hình ảnh cho UIButton đã chọn

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

Nhưng nếu bạn muốn thay đổi hình ảnh nút đã chọn, bạn cần thay đổi trạng thái đã chọn của nó. Sau đó, chỉ hình ảnh được chọn sẽ xuất hiện trong nút của bạn.

@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

trong 3.0 nhanh chóng :

@IBOutlet weak var selectionButton: UIButton!

selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.