【问题标题】:How to change UIButton image in Swift如何在 Swift 中更改 UIButton 图像
【发布时间】:2015-01-06 09:03:20
【问题描述】:

我正在尝试使用 Swift 更改 UIButton 的图像... 我该怎么办

这是 OBJ-C 代码。但我不知道 Swift:

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

【问题讨论】:

    标签: ios swift xcode cocoa-touch uibutton


    【解决方案1】:

    从您的 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)
    

    【讨论】:

    • 您应该将 buttonWithType 设置为 UIButtonType.Custom,而不是 System,直到图像显示出来
    • 对于那些寻找 Swift 3 语法的人:playButton.setImage(UIImage(named: "play.png"), for: .normal)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      假设这是您连接的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 是对按钮的引用,因此您只需执行“让 yourButton = sender as!UIButton”,然后根据需要对按钮进行更改。
      【解决方案4】:

      对于任何使用 Assets.xcassets 和 Swift 3 的人来说,都是这样的(不需要 .png)

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

      【讨论】:

        【解决方案5】:

        斯威夫特 5

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

        【讨论】:

          【解决方案6】:

          从 swift 3.0 开始,正常状态已被删除。您可以使用以下来应用正常状态。

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

          【讨论】:

            【解决方案7】:

            我更喜欢先在顶部初始化我的变量的方法:

            let playButton:UIButton!
            var image:UIImage!
            

            然后在 viewDidLoad 中设置它们

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

            【讨论】:

              【解决方案8】:

              是的,我们甚至可以通过使用标志来改变 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)
                  }
              
              }
              

              在这里,每次单击后,您的按钮图像都会交替变化。

              【讨论】:

                【解决方案9】:

                Swift 5 并确保图像缩放到按钮的大小,但保持在按钮范围内。

                yourButton.clipsToBounds = true
                yourButton.contentMode = .scaleAspectFill
                
                // Use setBackgroundImage or setImage
                yourButton.setBackgroundImage(UIImage(named: "yourImage"), for: .normal)
                

                【讨论】:

                  【解决方案10】:

                  您实际上可以通过突出显示按钮并在右侧工具栏上的检查器中更新图像来执行此操作。显然,您也可以按照前面所述在代码中执行此操作,但这是您的另一种选择

                  【讨论】:

                  • 这实际上不起作用。你在哪里更新图像?如果你在谈论不同的状态,比如高亮、选中等,它在那里不起作用,
                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:

                    在 swift 3.0 中

                    @IBOutlet weak var selectionButton: UIButton!
                    
                    selectionButton.setImage(UIImage.addBlueIcon, for: .selected)
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2015-05-14
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-09-07
                      • 1970-01-01
                      • 2022-12-01
                      相关资源
                      最近更新 更多