如何在Swift中更改UIButton图像

Lop*_* Hu 100 xcode uibutton ios swift

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

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

[playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

Dha*_*esh 290

从你的Obc-C代码我想你想设置一个Image for按钮,所以试试这个方法:

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

简而言之:

playButton.setImage(UIImage(named: "play.png"), forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

对于Swift 3:

let playButton  = UIButton(type: .custom)
playButton.setImage(UIImage(named: "play.png"), for: .normal)
Run Code Online (Sandbox Code Playgroud)

  • 对于那些寻找Swift 3语法的人:`playButton.setImage(UIImage(named:"play.png"),for:.normal)` (8认同)
  • 你应该将buttonWithType设置为UIButtonType.Custom,而不是在图像显示之前设置为System (7认同)

Anb*_*hik 9

假设这是你的联系UIButton Name方式

@IBOutlet var btn_refresh: UIButton!
Run Code Online (Sandbox Code Playgroud)

您可以直接将图像置于三种模式

 // 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)
Run Code Online (Sandbox Code Playgroud)

你的按钮动作

  //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)
}
Run Code Online (Sandbox Code Playgroud)


小智 9

在Swift 4,(Xcode 9)示例中将按钮的图像转换为On或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)
    }
}
Run Code Online (Sandbox Code Playgroud)


DS.*_*DS. 7

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

let buttonDone  = UIButton(type: .Custom)

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


Ale*_*ant 7

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

yourButton.clipsToBounds = true
yourButton.contentMode = .scaleAspectFill

// Use setBackgroundImage or setImage
yourButton.setBackgroundImage(UIImage(named: "yourImage"), for: .normal)
Run Code Online (Sandbox Code Playgroud)


Pat*_*ntC 6

截至swift 3.0.已删除正常状态.您可以使用以下来应用正常状态.

myButton.setTitle("myTitle", for: [])
Run Code Online (Sandbox Code Playgroud)


Kri*_*ian 5

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

let playButton:UIButton!
var image:UIImage!
Run Code Online (Sandbox Code Playgroud)

然后在viewDidLoad中设置它们

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


小智 5

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

}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

斯威夫特 5

yourButton.setImage(UIImage(named: "BUTTON_FILENAME.png"), for: .normal)
Run Code Online (Sandbox Code Playgroud)