Swift에서 UIButton 이미지를 변경하는 방법


111

Swift를 사용하여 UIButton의 이미지를 변경하려고합니다. 어떻게해야합니까?

이것은 OBJ-C 코드이지만 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
당신은 UIButtonType.Custom을하지 시스템에 이미지가 표시 될 때까지 buttonWithType을 설정해야합니다
sazz

8
사람들을 위해 스위프트 3 구문을 찾고 : playButton.setImage(UIImage(named: "play.png"), for: .normal)
더스틴 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)
}

버튼에 대한 작업이있는 경우 버튼을 콘센트로 설정할 필요가 없습니다. 버튼 매개 변수 sender는 버튼에 대한 참조이므로 "let yourButton = sender as! 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부터 .normal state가 제거되었습니다. 다음을 사용하여 normal state를 적용 할 수 있습니다.

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

    }
}

1

스위프트 5

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.