2014-09-19 6 views
0

В подклассе UIButton:Невозможно установить цвет фона UIButton, если выбрано?

- (void) setHighlighted:(BOOL)highlighted { 
    [super setHighlighted:highlighted]; 

    if (highlighted) { 
     self.backgroundColor = [UIColor redColor]; 
    } 
    else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 

- (void)setSelected:(BOOL)selected { 
    [super setSelected:selected]; 
    if (selected) { 
     self.backgroundColor = [UIColor greenColor]; //this happens 
    } 
    else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 

Я вижу красный цвет, когда подсвечивается кнопка. Но когда я устанавливаю button.selected = YES, я никогда не вижу зеленый цвет. Почему setHighlighted работает, но setSelected не работает?

Я могу установить точку останова на линии «это случилось», и это происходит. Но цвет фона кнопки не меняется на зеленый.

+0

Какие атрибуты вы установили в построителе интерфейса? – Jared

+0

есть несколько ответов. http://stackoverflow.com/questions/4049103/iphone-how-to-set-backgroundcolor-of-uibutton-with-buttontype-uibuttontypecust похоже, что одним из распространенных решений является установка фонового изображения, которое в основном представляет собой 1x1 пиксель цвет. Это решение работает, потому что вы устанавливаете фоновое изображение для каждого конкретного состояния. Я не совсем уверен, почему ваш код не работает. кнопка не выбирается сразу после ее выбора? – mitrenegade

ответ

0

Вы устанавливаете свойство selected внутри действия UIControlEventTouchUpInside вашей кнопки? Если это так, ваш метод setHighlighted: получает вызов снова после setSelected:, поэтому backgroundColor устанавливается на синий.

+0

Да, это, наверное, то, что происходит. Знаете ли вы какие-либо обходные пути для этого? – soleil

+1

Я бы просто добавил метод updateBackgroundColor (или что-то), который проверяет оба состояния, а затем вызывает этот метод из переопределенных сеттеров. – ryanipete

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