2010-05-03 9 views
0

레이블의 현재 색상을 기반으로 UI 레이블의 색상을 변경하기위한 if 문을 알아내는 데 문제가 있습니다. 예를 들어, 레이블 색상이 현재 빨간색이고 올바른 버튼을 누르면 레이블 색상을 검정색으로 변경해야합니다. 라벨 색상이 검은 색이면 라벨 색상을 파란색으로 변경하고 싶습니다.iPhone dev의 현재 레이블 색상을 기반으로 한 레이블 색상 변경

답변

1

이론상으로는 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]; 
    } 
} 
: 예를 들어

,의는 라벨의 색상이 가위, 바위, 보 게임에서 무기 선택을 나타냅니다 가정 해 봅시다