iOS:禁用时UIButton的标题颜色

时间:2016-01-07 16:53:43

标签: ios objective-c text uibutton disabled-control

我使用Mac OS X El Capitan 10.11.2,Xcode 7.1.1和iOS 7作为iOS应用程序的部署目标。

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

结果 - 如果按钮的标题颜色与默认颜色不同,则应手动应用视觉禁用。这是非常糟糕的部分行为。使用UILabel时没有观察到这种情况。无论文本颜色如何,禁用标签时都会保留禁用的灰色外观。 UIButton在给定图像时表现如预期 - 当按钮被禁用时,图像的alpha值设置为较低的值。如果它们被禁用,UIButton和UILabel都不会改变背景颜色。

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

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

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

此外,指定的错误行为是否高于某些回归,或?

1 个答案:

答案 0 :(得分:5)

你不能。在setTitleColor:forState:状态下致电UIControlStateNormal后,该颜色适用于所有不具备特定颜色的州。

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

  

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

因此,一旦为Normal状态设置了颜色,就需要为所有其他状态设置所需的颜色,例如Disabled状态。