【发布时间】:2010-05-03 09:30:24
【问题描述】:
我无法确定用于根据标签的当前颜色更改 UI 标签颜色的 if 语句代码。例如,如果标签颜色当前为红色并且按下了正确的按钮,我希望标签颜色变为黑色。如果标签颜色为黑色,我希望标签颜色变为蓝色。
【问题讨论】:
我无法确定用于根据标签的当前颜色更改 UI 标签颜色的 if 语句代码。例如,如果标签颜色当前为红色并且按下了正确的按钮,我希望标签颜色变为黑色。如果标签颜色为黑色,我希望标签颜色变为蓝色。
【问题讨论】:
理论上您可以使用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];
}
}
【讨论】: