Теоретически вы можете использовать условное выражение, например if ([label.backgroundColor isEqual:[UIColor blackColor]) { ... }
, но вы должны быть осторожны, потому что два цвета, которые выглядят одинаково, могут не обязательно проходить isEqual:
. (например, если один - в градациях серого, а другой - 24-битный RGB).
Выполнение условной логики на основе визуальных атрибутов вашего представления выглядит как проектное решение, которое вы все равно можете пересмотреть. Вы делаете более трудным изменение вашего визуального дизайна в будущем (например, использование разных цветов) без внесения ошибок в логику вашего приложения. Шаблон Model View Controller побуждает нас отделить состояние нашей модели, логику, которая ее изменяет, и представления, которые представляют ее визуально. Когда ваша метка переключается между тремя цветами, цвет, по-видимому, представляет некоторое базовое логическое состояние, которое переключается между тремя возможными значениями. Лучшим вариантом было бы циклически изменять это состояние в вашей базовой модели и позволить цвету метки отражать это состояние.
Например, допустим, цвет вашего ярлыка соответствует выбору оружия в игре «камень, бумага, ножницы»:
// .h
typedef enum WeaponState {
WeaponStateRock,
WeaponStateScissors,
WeaponStatePaper
} WeaponState;
// .m
- (IBAction)weaponSelectorButtonClicked {
if (weaponState == WeaponStateRock) {
weaponState = WeaponStateScissors;
}
else if (weaponState == WeaponStateScissors) {
weaponState = WeaponStatePaper;
}
else {
weaponState = WeaponStateRock;
}
[self refreshView];
}
- (void)refreshView {
if (weaponState == WeaponStateRock) {
self.label.backgroundColor = [UIColor redColor];
}
else if (weaponState == WeaponStateScissors) {
self.label.backgroundColor = [UIColor blackColor];
}
else {
self.label.backgroundColor = [UIColor blueColor];
}
}