我将Mac OS X El Capitan 10.11.2,Xcode 7.1.1和iOS 7用作手头iOS应用程序的部署目标。
目前,我想对UIButton进行样式化,以使其文本和背景(颜色/图像)变灰/禁用时的Alpha值降低。我开始在.xib编辑器中使用控件,并开始更改文本颜色,背景颜色和按钮图像。同样,在每次更改上述参数之后,我也正在更改启用状态。结果令人惊讶。如果按钮的标题颜色设置为默认颜色-蓝色,则在Xcode中从.xib编辑器禁用按钮会导致按钮的标题显示为灰色,这很棒-无需在禁用状态下手动样式化标题。当按钮的标题颜色设置为不同于默认值(例如绿色)的值时,就会出现尴尬的行为-没有灰度,
结果-如果按钮的标题颜色与默认颜色不同,则应手动应用视觉禁用。这是非常糟糕的部分行为。使用UILabel时未观察到此类情况。无论文本颜色如何,禁用标签后都将保留禁用的灰色外观。给UIButton图像时,其行为符合预期-禁用按钮后,图像的Alpha值设置为较低的值。如果禁用了UIButton和UILabel,它们都不会更改背景颜色。
我想要的是使用iOS自动禁用的UI外观,以便所有UI元素在禁用时都具有视觉一致性。我不想使用:
UIButton setTitleColor: (UIColor*) color forState: (UIControlState) state;
因为不想手动为禁用状态指定颜色,而是在禁用状态下使用自动iOS颜色,图像等替代。
另外,指定的错误行为是否高于某种回归,还是?
你不能 一旦你调用setTitleColor:forState:
的UIControlStateNormal
状态,即颜色适用于那些没有自己的特定颜色的所有状态。
的文档UIButton setTitleColor:forState:
对此进行了明确说明:
通常,如果未为状态指定属性,则默认值为使用UIControlStateNormal值。如果未设置UIControlStateNormal值,则该属性默认为系统值。因此,至少应设置正常状态的值。
因此,一旦为“正常”状态设置了颜色,就需要为所有其他状态(例如“禁用”状态)设置所需的颜色。