iOS:禁用时的 UIButton 标题颜色
Posted
技术标签:
【中文标题】iOS:禁用时的 UIButton 标题颜色【英文标题】:iOS: UIButton's title color when disabled 【发布时间】:2016-01-07 16:53:42 【问题描述】:我正在使用 Mac OS X El Capitan 10.11.2、Xcode 7.1.1 和 ios 7 作为手头 iOS 应用程序的部署目标。
目前,我想对 UIButton 进行样式化,使其文本和背景(颜色/图像)在禁用时变灰/降低 alpha。我开始在 .xib 编辑器中使用控件,并开始更改文本颜色、背景颜色和按钮图像。此外,在每次更改上述参数后,我也在更改启用状态。结果令人惊讶。如果按钮的标题颜色设置为默认颜色 - 蓝色,则从 Xcode 中的 .xib 编辑器禁用按钮会导致按钮标题变灰,这很好 - 无需在禁用状态下手动设置标题样式。当按钮的标题颜色设置为与默认值不同的值(比如说绿色)时,就会发生尴尬的行为 - 没有应用灰度、降低 alpha 分量或任何其他视觉禁用效果。
结果 - 如果按钮的标题颜色与默认颜色不同,则应手动应用视觉禁用。这是非常糟糕的部分行为。使用 UILabel 时没有观察到这样的情况。无论文本颜色如何,禁用标签时都会保留禁用的灰色外观。 UIButton 在给定图像时的行为与预期一样 - 当按钮被禁用时,图像的 alpha 值设置为较低的值。如果 UIButton 和 UILabel 被禁用,它们都不会改变背景颜色。
我想要的是使用 iOS 自动禁用的 UI 外观,以便在所有 UI 元素被禁用时具有视觉一致性。我不想使用:
UIButton setTitleColor: (UIColor*) color forState: (UIControlState) state;
因为不想手动指定禁用状态的颜色,而是在禁用状态下使用自动 iOS 颜色、图像等交替。
另外,指定的错误行为是否高于某些回归,或者?
【问题讨论】:
【参考方案1】:你不能。在 UIControlStateNormal
状态上调用 setTitleColor:forState:
后,该颜色将应用于所有没有自己特定颜色的状态。
UIButton setTitleColor:forState:
的文档说明了这一点:
一般来说,如果没有为状态指定属性,则默认使用 UIControlStateNormal 值。如果未设置 UIControlStateNormal 值,则该属性默认为系统值。因此,您至少应该设置正常状态的值。
因此,一旦您为 Normal 状态设置了颜色,您需要为所有其他状态(例如 Disabled 状态)设置所需的颜色。
【讨论】:
好的,这适用于 UIButton。 UILabel 呢?它不支持对文本颜色的这种说明。只有普通 (textColor
) 和突出显示 (highlightedTextColor
) 文本颜色作为单独的属性提供。为什么在使用与默认颜色不同的颜色时,标签的自动生成的禁用 UI 没有损坏?
按钮是控件 (UIControl
),标签不是。它们的 API 完全不同。
好的,有没有推荐的方式来设置 iOS 应用程序的样式——比如说使用 CSS,或者应该手动设置他/她需要的每个控件的样式或子类化每种类型的控件,以便自动化其样式化?
这是一个全新的问题。对该主题进行一些研究,并在需要时发布一个新问题。同时,如果此答案解决了您最初的问题,请随时接受此答案以表明您的问题已得到解决。以上是关于iOS:禁用时的 UIButton 标题颜色的主要内容,如果未能解决你的问题,请参考以下文章
避免 UIPickerView ios 上的 UIButton 覆盖
更改自定义 UIButton 的 TitleColor (iOS 8 + swift)