我有点困惑,今天发现在尝试更改UIButton
上显示的文字时,以下内容无效。
// 001
[[[self button] titleLabel] setText:@"Peanuts"];
我想我知道为什么,但我只想在这里确认一下我的想法。 001确实设置了titleLabel文本属性,但由于它是UILabel
(UIButton
的子视图),因此不会重新绘制UI。这会导致对UILabel
文本属性进行内部更改,但遗憾的是UI中没有可视更改。
// 002
[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal];
似乎方法setTitle:forState是正确的方法,它有额外的开销需要一个状态但是会调用UI重绘,因为它直接在UIButton
上调用。我的问题是,002是这样做的正确方法,看起来除非我做错了吗?
答案 0 :(得分:7)
你是对的。
[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal];
是应该设置按钮标题的方式。这允许您控制按钮在所有不同控制状态下的外观。
来自文档:
通常,如果没有为状态指定属性,则默认为 使用UIControlStateNormal值。如果值为 未设置UIControlStateNormal,则属性默认为a 系统价值。因此,您至少应该为其设置值 正常状态。