UIButton setTitle: forState: вопрос

Почему работает следующий код:

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

пока это не так:

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

Ответы

Ответ 1

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

Когда вы устанавливаете каждый отдельно, вы говорите, что свойство 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: forState: может принимать только известное UIControlState, и вы объединяете два значения UIControlState.

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

Update:

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

Ответ 3

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