2010-12-06 2 views
14

Почему следующий код работает:UIButton SETTITLE: Форстат: вопрос

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted]; 
[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateDisabled]; 

в то время как это не делает:

[signInBtn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted|UIControlStateDisabled]; 
+0

Вау, это действительно странно, что не работает. +1 – BoltClock 2010-12-06 20:17:16

+2

Обратите внимание, что имя метода упоминает только сингулярное состояние: `not` states: `. – Jasarien 2010-12-06 20:34:29

+5

@Jasarien им не следует использовать битмаски, то – bioffe 2010-12-06 20:36:41

ответ

29

Я знаю, что это старый вопрос, но эти ответы неверны.

При установке каждого отдельно вы говорите, что state имущество должно быть UIControlStateHighlighted ИЛИ UIControlStateDisabled, но не оба

Когда вы побитовое или их вместе, вы заявляете, что они оба должны быть установлены в state собственности. Значение UIControlStateHighlighted И UIControlStateDisabled установлены в собственности state.

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

[button setTitle:@"highlighted and selected" forState:UIControlStateHighlighted | UIControlStateSelected]; 
[button setTitle:@"Highlighted only" forState:UIControlStateHighlighted]; 
[button setTitle:@"Selected only" forState:UIControlStateSelected]; 
[button setTitle:@"Normal" forState:UIControlStateNormal]; 

NSLog(@"Normal title: %@", [[button titleLabel] text]); // prints title: Normal 

[button setSelected:YES]; 

NSLog(@"Selected title: %@", [[button titleLabel] text]); // prints title: Selected only 

[button setSelected:NO]; 
[button setHighlighted:YES]; 

NSLog(@"highlighted title: %@", [[button titleLabel] text]); // prints title: Highlighted only 

[button setSelected:YES]; 

NSLog(@"highlighted and selected title: %@", [[button titleLabel] text]); // prints title: highlighted and selected 
2

Поскольку setTitleColor: Форстат: метод может принимать только известный UIControlState и вы 'OR ORING два значения UIControlState вместе.

Каждое UIControlState (на низком уровне), скорее всего, является простой целочисленной константой.

Update:

Это битовая, что делает его гораздо более странным, что он не работает, но моя точка до сих пор стоит. (Он осторожно опирается на одну сторону и опасно вращается).

-1

Это может быть ошибка. Попробуйте изменить битмаску с непредвиденным значением, например UIControlStateHighlighted & UIControlStateDisabled, и он сделает все состояние цвета одинаковым.

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