更改 UIButton 文本

所以我试图在点击 UIButton 时更新它上的文本。我用下面这行来改变文本:

calibrationButton.titleLabel.text = @"Calibration";

我已经确认文本正在改变,但是当我运行应用程序并点击按钮时,它会在一瞬间改为“校准”,然后回到默认值。知道为什么会这样吗?是否需要调用某种刷新函数?

100672 次浏览

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];

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)

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?

programmatically you can set button title like below:

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

you can also set button title property from storyboard.

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)

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)

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)