2016-01-07 44 views
0

我正在使用Mac OS X El Capitan 10.11.2,Xcode 7.1.1和iOS 7作为iOS应用程序的部署目标。iOS:禁用UIButton的标题颜色

当前,我想要设置一个UIButton的样式,以便它的文本和背景(颜色/图像)灰显/禁用时降低了Alpha。我开始使用.xib编辑器中的控件进行游戏,并开始更改文本颜色,背景颜色和按钮图像。另外,在每次更改上述参数之后,我也改变了启用状态。结果令人惊讶。如果按钮的标题颜色设置为默认值 - 蓝色,则在Xcode中禁用.xib编辑器中的按钮会导致按钮标题变灰,这非常棒 - 无需手动将标题设置为禁用状态。当按钮的标题颜色设置为与默认值不同的值(绿色让我们假设)时,会出现令人尴尬的行为 - 无灰度,降低alpha分量或任何其他视觉禁用效果。

结果 - 如果按钮的标题颜色与默认标题颜色不同,应该手动应用可视化禁用。这是非常糟糕的部分行为。使用UILabel时没有观察到这种情况。无论文字颜色,禁用标签时禁用灰色显示的外观。 UIButton在给定图像时的行为与预期相同 - 当按钮被禁用时,图像的alpha值设置为较低的值。如果UIButton和UILabel被禁用,则不会更改背景颜色。

我想要的是使用iOS自动禁用的用户界面外观,以便在所有UI元素禁用时都具有视觉一致性。我不想使用:

UIButton setTitleColor: (UIColor*) color forState: (UIControlState) state;

因为不想手动指定为禁用状态的颜色,而是使用自动的iOS颜色,图像等交替处于禁用状态。

此外,在某些回归之上是指定的错误行为,还是?

回答

4

你不行。一旦在UIControlStateNormal状态下致电setTitleColor:forState:,该颜色将应用于没有自己特定颜色的所有状态。

UIButton setTitleColor:forState:的文档说明了这一点:

在一般情况下,如果没有一个国家指定的属性,则默认是使用UIControlStateNormal值。如果未设置UIControlStateNormal值,则该属性默认为系统值。因此,至少应该设置正常状态的值。

因此,一旦为正常状态设置了颜色,就需要为所有其他状态(如“已禁用”状态)设置所需的颜色。

+0

好的,这适用于UIButton。那么UILabel呢?它不支持文字颜色的说明。只有普通('textColor')和高亮('highlightTextColor')文字颜色作为独立的属性提供。为什么在使用与默认不同的颜色时,标签的自动生成的禁用UI未被破坏? – Ivan

+0

按钮是一个控件('UIControl'),标签不是。他们的API完全不同。 – rmaddy

+0

好的,有没有推荐的iOS应用程序风格化方式 - 比方说使用CSS,或者应该手动风格化每个控件或子类,他/她需要的每种类型的控件,以便自动化它的风格化? – Ivan