2010-05-03 6 views
0

Je n'arrive pas à trouver le code d'instruction if pour modifier la couleur d'une étiquette d'interface utilisateur en fonction de la couleur actuelle de l'étiquette. Par exemple, si la couleur de l'étiquette est actuellement rouge et que le bouton correct est enfoncé, je souhaite que la couleur de l'étiquette devienne noire. Si la couleur de l'étiquette est noire, je souhaite que la couleur de l'étiquette devienne bleue.Modification de la couleur de l'étiquette en fonction de la couleur de l'étiquette dans l'iPhone dev

Répondre

1

En théorie, vous pouvez utiliser un conditionnel comme if ([label.backgroundColor isEqual:[UIColor blackColor]) { ... }, mais vous devez faire attention car deux couleurs qui semblent identiques ne passent pas nécessairement isEqual:. (par exemple, si l'un est en niveaux de gris et l'autre en RGB 24 bits). L'exécution d'une logique conditionnelle basée sur les attributs visuels de votre vue semble être une décision de conception que vous souhaiterez peut-être reconsidérer de toute façon. Vous rendez plus difficile la modification de votre conception visuelle dans le futur (par exemple, pour utiliser des couleurs différentes) sans introduire de bogues dans la logique de votre application. Le modèle Model View Controller nous encourage à découpler l'état de notre modèle, la logique qui le modifie et les vues qui le représentent visuellement. Lorsque votre étiquette passe entre trois couleurs, la couleur représente vraisemblablement un état logique sous-jacent qui passe entre trois valeurs possibles. Un meilleur choix serait de faire circuler cet état dans votre modèle sous-jacent, et de laisser la couleur de l'étiquette refléter cet état.

Par exemple, supposons que la couleur de votre étiquette représente une sélection d'armes dans une roche, papier, ciseaux jeu:

// .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]; 
    } 
} 
Questions connexes