自定义 UIControl,在色调颜色变化时具有 UILabel 调光



在UISegmentedControl的情况下,一旦出现弹出框或警报,控件就会变暗为灰色(使色调颜色不饱和)

我正在构建自己的 UIControl 子类,它使用 UILabel 作为子视图

我想使UILabel的文本颜色变暗(去饱和),与UISegmentedControl或(UIButton...)相同的方式

查看 UIView 上的 tintColortintAdjustmentMode 属性(从 iOS 7 开始可用)和 tintColorDidChange 方法。

如果在自定义视图中覆盖它们,则可以响应变暗。

正如iOS 7 UI转换指南所说:

当提醒或操作表出现时,iOS 7 会自动使其后面视图的色调颜色变暗。为了响应此颜色更改,在其呈现中使用tintColor的自定义视图子类应重写tintColorDidChange以在适当时刷新呈现。

解决方案可能如下所示:

- (void)tintColorDidChange {
    self.titleLabel.textColor = self.tintColor;
}

虽然接受的答案确实对我有帮助,但结果是即使屏幕没有变暗,变暗的颜色也会应用于我的控件。我通过以下方式解决此问题:

override func tintColorDidChange() {
    switch tintAdjustmentMode {
    case .Dimmed:
        myLabel.textColor = UIColor.grayColor()
    default:
        myLabel.textColor = UIColor.blueColor()
    }
}

仅当屏幕变暗时,才会正确地将灰色应用于控件。

最新更新