为UIButton设置titleLabel

fuz*_*oat 5 iphone objective-c uibutton uilabel

我有点困惑,今天发现以下在尝试更改显示的文本时不起作用UIButton.

// 001
[[[self button] titleLabel] setText:@"Peanuts"];
Run Code Online (Sandbox Code Playgroud)

我想我知道为什么,但我只是想在这里证实我的想法.001确实设置了titleLabel文本属性,但作为其a UILabel(子视图UIButton),它不会导致重绘UI.这导致UILabel文本属性的内部更改,但遗憾的是UI中没有可视更改.

// 002
[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

似乎方法setTitle:forState是正确的方法,它有额外的开销需要一个状态但是会调用一个UI重绘,因为它直接被调用UIButton.我的问题是,002是正确的方法,这似乎是除非我做错了什么?

Mic*_*lum 7

你是对的.

[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

是应该设置按钮标题的方式.这允许您控制按钮在其所有不同控制状态下的外观.

来自文档:

通常,如果没有为状态指定属性,则默认使用UIControlStateNormal值.如果未设置UIControlStateNormal的值,则该属性默认为系统值.因此,您至少应该设置正常状态的值.