user2303213
user2303213

Reputation: 93

How to change button image in swift?

I am working on an app which has a button. The button has no text, image or background.

So what I want to do is to give it an image in the viewDidLoad function.

This is what I have:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {

    super.viewDidLoad()

    tapButton.setImage("redTap.png", forState: UIControlState.Normal)
}

But I have an error that says I can not convert string to UIIMage.

How do I get it to work?

I have tried:

let image = UIImage(named: "redTap.png")

tapButton.setImage(image, forState: UIControlState.Normal)

I have gotten it to work but now I have a problem.

The image is suppose to be a red text but it shows up blue.

I was able to get the image to show correctly by using:

let image = UIImage(named: imageColor[randNum])?.imageWithRenderingMode(.AlwaysOriginal)
tapButton.setImage(image, forState: UIControlState.Normal)

What I want now is to not have the button be highlighted when the button is pressed. I have a few other buttons that have images assigned to them in xcode and not through code. They don't highlight when pressed.

So how can I get rid of highlighting when the button is pressed?

Upvotes: 5

Views: 51015

Answers (9)

Zulqarnain Naveed
Zulqarnain Naveed

Reputation: 108

Update For latest swift versions, It works this way

button.setImage(UIImage(named: "propopup")?.withRenderingMode(.alwaysOriginal), for: [])

Upvotes: 0

Siddhesh Bhide
Siddhesh Bhide

Reputation: 424

First set your button type as Custom in interface builder and set the image for normal state for your button.

enter image description here

Connect IBOutlet for button in class file as

@IBOutlet weak var btnCheckbox: UIButton!

in your class file in viewDidLoad set image for selected state as

btnCheckbox.setImage(UIImage.init(named: "name_of_image"), for: .selected)

Create @IBAction for in class file as

@IBAction func onTapCheckBox(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}

Then connect @IBAction to your button's Touch up Inside event from interface builder

Upvotes: 1

Mikita Atamanyuk
Mikita Atamanyuk

Reputation: 31

now (swift 3 edition):

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)
    tapButton.setImage(UIImage(named: "redTap")?.withRenderingMode(.alwaysOriginal), for: .normal)
}

Upvotes: 3

Amr Angry
Amr Angry

Reputation: 3831

Swift 3

yourBtn.setImage( UIImage.init(named: "imagename"), for: .normal)

Upvotes: 9

wenqi
wenqi

Reputation: 21

There's one simple solution:

@IBOutlet var tapButton: UIButton!{
didSet{
let image = UIImage(named: imageColor[randNum])
tapButton.setImage(image, forState: UIControlState.Normal)
}

Besides that, in the Attribute Inspector, Set Button type to 'Custom'

Upvotes: 2

Meagan S.
Meagan S.

Reputation: 1114

You don't need ".png".

If ".imageWithRenderingMode(.AlwaysOriginal)" is working for you: To keep the same image in different states, you have to set the same image/properties for the different states.

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()

    tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Normal)
    tapButton.setImage(UIImage(named: "redTap")?.imageWithRenderingMode(.AlwaysOriginal), forState: .Highlighted)
}

Upvotes: 14

user3441734
user3441734

Reputation: 17534

let button = UIButton(type: .Custom)
let image = UIImage(named:"redTap")?.imageWithRenderingMode(.AlwaysTemplate)
button.setImage(image, forState: .Normal)
button.tintColor = UIColor.redColor()

Upvotes: 0

Marco
Marco

Reputation: 2324

First I would put the image you wanted inside the Assets.xcassets folder. Just drag it in. Then you can call it whatever you want by double-clicking on it. Lets say that it is called "redTap".

For code you would put:

@IBOutlet var tapButton: UIButton!

override func viewDidLoad() {

    super.viewDidLoad()

    let redTapImage = UIImage(named: "redTap")
    tapButton.setImage(redTapImage, forState: UIControlState.Normal)
}

Upvotes: 2

impression7vx
impression7vx

Reputation: 1863

Let image = UIImage(named : "redTap.png") tapButton.setImage(image, .Normal)

Upvotes: 0

Related Questions