iOS: UIButton 禁用时的标题颜色

iOS: UIButton's title color when disabled

我正在使用 Mac OS X El Capitan 10.11.2、Xcode 7.1.1 和 iOS 7 作为 iOS 手头的应用程序。

目前,我想对 UI 按钮进行样式化,使其文本和背景 (color/image) 在禁用时呈灰色 out/has 降低 alpha。我开始使用 .xib 编辑器中的控件并开始更改文本颜色、背景颜色和按钮图像。此外,在每次更改上述参数后,我也会更改启用状态。结果令人惊讶。如果按钮的标题颜色设置为默认颜色 - 蓝色,然后从 Xcode 中的 .xib 编辑器禁用按钮会导致按钮标题变灰,这很好 - 无需手动设置标题样式处于禁用状态。当按钮的标题颜色设置为与默认颜色不同的值(比方说绿色)时,就会发生尴尬的行为 - 没有应用灰度、降低 alpha 组件或任何其他视觉禁用效果。

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

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

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

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

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

你不能。在 UIControlStateNormal 状态调用 setTitleColor:forState: 后,该颜色将应用于所有没有自己特定颜色的状态。

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

In general, if a property is not specified for a state, the default is to use the UIControlStateNormal value. If the UIControlStateNormal value is not set, then the property defaults to a system value. Therefore, at a minimum, you should set the value for the normal state.

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