UIButton的一个小陷阱

在使用UIButton的时候,有时需要在运行时动态改变按钮的文字、样式。但iOS SDK的文档说得不是很清楚,使用错误的API经常会产生诡异的结果,如点击UIButton后,text变回默认值。

这问题我遇到过三回了,每回都要重新google一下才解决。以前觉得这些不起眼的小问题,不值得单独写一篇文章,但往往这些问题现常见。以后会持续把遇到的一些小问题作为Tips的形式分享出来,希望也可以帮助到其它的开发者。

错误的方式

1
2
/* Wrong way */
yourButton.titleLabel.text = @"SampleText";

这里titleLabel是readonly的,但我们可以改变titleLabel的property。问题出在UIButton是有Default, Highlighted, Selected, Disabled几种状态的。这种方式会改变当前状态的text,但一旦状态改变(如tap一下),则会变成默认的设置。

正确的方式

1
2
/* Right way */
[yourButton setTitle:@"SampleText" forState:UIControlStateNormal];

如果其它状态没有特别设置的话,设置UIControlStateNormal这个状态,会自动设置其它状态。

最后附上SO上的关于本话题的讨论

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog