我无法根据标签的当前颜色找出用于更改UI标签颜色的if语句代码。例如,如果标签颜色当前为红色并且按下了正确的按钮,我希望标签颜色变为黑色。如果标签颜色为黑色,我希望标签颜色变为蓝色。
答案 0 :(得分:1)
理论上你可以使用类似if ([label.backgroundColor isEqual:[UIColor blackColor]) { ... }
之类的条件,但你必须要小心,因为看起来相同的两种颜色可能不一定通过isEqual:
。 (例如,如果一个是灰度,另一个是24位RGB)。
基于视图的可视属性执行条件逻辑看起来像是一个设计决策,您可能想要重新考虑。您在将来更改视觉设计(例如,使用不同的颜色)时更加困难,而不会在应用程序的逻辑中引入错误。模型视图控制器模式鼓励我们解耦模型的状态,修改它的逻辑以及可视化表示它的视图。当您的标签在三种颜色之间循环时,颜色可能代表一些在三个可能值之间循环的基本逻辑状态。更好的选择是在底层模型中循环该状态,并让标签的颜色反映该状态。
例如,假设你的标签的颜色代表了摇滚,纸张,剪刀游戏中的武器选择:
// .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];
}
}