Changing UIButton text
Asked Answered
O

7

104

So I'm trying to update the text on a UIButton when I click it. I'm using the following line to change the text:

calibrationButton.titleLabel.text = @"Calibration";

I have verified that the text is changing, but when I run the app and I click on the button, it changes to "Calibration" for a split second and then goes right back to its default value. Any ideas why this might be happening? Is there some sort of refresh function I need to be calling?

Outherod answered 10/7, 2012 at 15:47 Comment(1)
possible duplicate of iPhone UIButton TitleLabel text?Isomeric
L
253

When laying out its subviews, a UIButton will set its titleLabel's text value using its own title values, so that you can set up to four different strings for the four states (normal, highlighted, selected, disabled).

Because of this feature, setting the titleLabel's text directly won't persist, and will be reset by the button when it lays out its subviews.

This is what you have to do to change the title text for a button's state.

[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];
Loach answered 10/7, 2012 at 15:50 Comment(6)
so what button.titleLabel.text=@"some text" is supposed to do then?Valida
@BorisGafurov If you type in button.titleLabel, you see that titleLabel is a read-only property, and so any of a read-only property's properties are read-only as well. Using dot-notation to edit them won't work, and so you need explicit methods in order to edit them. This makes sense for me at least.Null
I think I wasted about two hours until I realized this (which sadly I think I already knew!)Symbiosis
@Null Actually, read-only properties CAN have read/write properties. I use the titlelabel's tag to pass an integer to a action method. Also see Apple's docs link Although this property is read-only, its own properties are read/write. Use these properties primarily to configure the text of the button. For example:Beatup
@Beatup Yes you are right. I'm slightly embarrassed that I wrote that, but that was in the first couple months that I was into iOS, so I guess I can't be too concernedNull
@Null no worries! it's an old post.Beatup
V
37

To set button text use the following method:

[calibrationButton setTitle: @"Calibration" forState: UIControlStateNormal];

See UIButton class reference for more details... http://developer.apple.com/library/ios/#documentation/uikit/reference/UIButton_Class/UIButton/UIButton.html

Or in Swift 3:

calibrationButton.setTitle("Calibration", for: .normal)
Vitality answered 10/7, 2012 at 15:50 Comment(0)
N
6

programmatically you can set button title like below:

[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

you can also set button title property from storyboard.

Nefarious answered 11/7, 2015 at 17:45 Comment(0)
A
2

Not a huge deal, and possibly obvious, but there are several states available for buttons. If you provide the 'wrong' one, you will not see the text change as desired.

I noticed that my button was not showing the text I added, using the methods shown here. Check this link to make sure you are providing the UIControlState that you intend.

What's the difference between UIControlStateHighlighted and UIControlStateSelected?

Atop answered 5/4, 2014 at 18:35 Comment(0)
A
2

For Swift 3.0

let button = UIButton(type: .system)
button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
button.setTitle("set here", for: .normal)
button.addTarget(self, action: #selector(TableViewController.actionButtonTocuh), for: .touchUpInside)
button.titleLabel?.textColor  = #colorLiteral(red: 0.1019607857, green: 0.2784313858, blue: 0.400000006, alpha: 1)
view.addSubview(button)
Atlantes answered 21/10, 2016 at 8:46 Comment(0)
M
1

If you don't want to set the title for all states, just set it for the normal state since the title for the unset states will default to the title of the normal state.

btn.setTitle("Some text", for:.normal)
Milewski answered 28/11, 2019 at 9:34 Comment(0)
A
0

For Swift 2.0:

let btnObject : UIButton  = UIButton() 
btnObject.frame = CGRect(x: 8, y: 89, width: 70, height: 22)
btnObject.setTitle("Button Title", forState: UIControlState.Normal)
btnObject.titleLabel?.font = UIFont(name: "Helvetica Neue", size: 13)
btnObject.titleLabel?.textColor = UIColor.whiteColor()
btnObject.backgroundColor = UIColor(red: 189/255, green: 176/255, blue: 0/255, alpha: 1)
btnObject.titleLabel?.textAlignment = NSTextAlignment.Center
btnObject.addTarget(self, action: "btnbtnObjectClick:", forControlEvents: UIControlEvents.TouchUpInside)
subView.addSubview(btnObject)
Abradant answered 2/12, 2015 at 12:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.