วิธีเปลี่ยนภาพ UIButton ใน Swift


112

ฉันกำลังพยายามเปลี่ยนรูปภาพของ UIButton โดยใช้ Swift ... ฉันควรทำอย่างไร

นี่คือรหัส OBJ-C แต่ฉันไม่รู้ด้วย Swift:

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

คำตอบ:


321

จากรหัส Obc-C ของคุณฉันคิดว่าคุณต้องการตั้งค่าปุ่ม Image for ดังนั้นลองทำตามวิธีนี้:

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)
Dustin Senos

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

คุณไม่จำเป็นต้องตั้งปุ่มเป็นเต้าเสียบหากคุณมีการดำเนินการกับปุ่ม ผู้ส่งพารามิเตอร์ปุ่มคือการอ้างอิงถึงปุ่มดังนั้นคุณสามารถทำเพียงแค่ "ให้ yourButton = ผู้ส่งเป็น! UIButton" จากนั้นทำการเปลี่ยนแปลงปุ่มตามต้องการ
Micah Montoya

7

สำหรับใครที่ใช้ Assets.xcassets และ Swift 3 จะเป็นแบบนี้ (ไม่ต้องใช้. png)

let buttonDone  = UIButton(type: .Custom)

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

6

ในขณะที่ swift 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

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

    }
}


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.