根据iPhone开发中的当前标签颜色更改标签颜色

时间:2010-05-03 09:30:24

标签: iphone colors uilabel

我无法根据标签的当前颜色找出用于更改UI标签颜色的if语句代码。例如,如果标签颜色当前为红色并且按下了正确的按钮,我希望标签颜色变为黑色。如果标签颜色为黑色,我希望标签颜色变为蓝色。

1 个答案:

答案 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];
    }
}