2014-01-09 2 views
5

В случае UISegmentedControl, как только поповер или бодрый присутствует, управление тускнеет до серого (насыщенность цвета оттенка)Пользовательское UIControl с UILabel затемнения на изменении цвета оттенка

I'am строит свой собственный UIControl подкласс, который использует UILabel как подвид

я хочу, чтобы затемнить (обесцветить) цвет текста на UILabel, точно так же, как по UISegmentedControl или (UIButton ...)

ответ

10

Посмотрите на tintColor и tintAdjustmentMode свойств на UIView (доступный с iOS 7) и метод tintColorDidChange.

Если вы переопределяете их в своем пользовательском представлении, вы можете реагировать на то, что он был затемнен.

Как iOS 7 UI Transitioning Guide говорит:

Когда появляется лист оповещения или действие, IOS 7 автоматически приглушает оттенок цвета взглядов позади него. Чтобы ответить на это изменение цвета, пользовательский вид подкласса, который использует tintColor в своем рендеринге, должен переопределить tintColorDidChange, чтобы обновить рендеринг, когда это необходимо.

Решение может выглядеть следующим образом:

- (void)tintColorDidChange { 

    self.titleLabel.textColor = self.tintColor; 

} 
+0

спасибо, оказалось, что смена одной строки =) –

+0

@PeterLapisu для редактирования –

2

Хотя принятый ответ сделал мне помочь, результат был, что приглушенный цвет был применен к моему контролю, даже когда экран не был серым цвета. Я установил это следующим образом:

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

Это правильно применяет серый цвет к элементу управления, только если экран затемнен.

Смежные вопросы