改变UIButton文本

105

我想在点击一个 UIButton 时更新它的文本。我使用以下代码行来更改文本:

calibrationButton.titleLabel.text = @"Calibration";
我已经验证文本正在更改,但当我运行应用程序并单击按钮时,它会在瞬间更改为“Calibration”,然后立即返回其默认值。有什么想法为什么会发生这种情况吗?是否需要调用某种刷新功能?

我确认文本已经在改变,但是当我运行应用程序并点击按钮后,它短暂地更改为“Calibration”,然后立即回到它的默认值。您是否有任何想法为什么会发生这种情况?我是否需要调用某些刷新函数?


1
可能是重复的问题:iPhone UIButton TitleLabel text? - Sergey Kalinichenko
7个回答

254
当UIButton布局其子视图时,将使用自身的标题值设置其titleLabel的文本值,因此您可以为四种状态(normal,highlighted,selected,disabled)设置最多四个不同的字符串。
由于这个特性,直接设置titleLabel的文本不会保留,并且在UIButton布局其子视图时会被重置。
这是更改按钮状态下标题文本的步骤。
[calibrationButton setTitle:@"Calibration" forState:UIControlStateNormal];

4
那么,button.titleLabel.text=@"some text" 应该做什么呢? - Boris Gafurov
4
如果您键入button.titleLabel,您会发现titleLabel是只读属性,因此任何只读属性的属性也都是只读的。使用点表示法来编辑它们是行不通的,所以您需要显式方法才能编辑它们。对我来说,这是有意义的。 - erdekhayser
1
我想我浪费了大约两个小时才意识到这一点(可悲的是,我认为我已经知道了!) - race_carr
感谢您的回答。 - dinesharjani
3
@erdekhayser 实际上,只读属性可以拥有读写属性。我使用titleLabel的标签将整数传递给动作方法。同时请参考苹果的文档链接,“尽管该属性是只读的,但它本身的属性是可读写的。主要用于配置按钮的文本。例如:”。 - Aaron
显示剩余2条评论

37

6
以编程方式可以设置按钮标题,如下所示:
[myButton setTitle:@"buttonTitle" forState:UIControlStateNormal];

您还可以从Storyboard中设置按钮的标题属性。


2

针对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)

2

这并不是什么大问题,也可能很明显,但是按钮有几种可用状态。如果您提供了“错误”的状态,您将无法看到所需的文本更改。

我注意到我的按钮没有显示我添加的文本,使用了此处显示的方法。请查看此链接,确保您提供了您想要的UIControlState。

UIControlStateHighlighted和UIControlStateSelected有什么区别?


1
如果您不想为所有状态设置标题,只需为正常状态设置标题,因为未设置状态的标题将默认为正常状态的标题。
btn.setTitle("Some text", for:.normal)

0

对于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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接