2011-02-28 4 views
0

switch 문을 사용하여 UIActionSheet (iPhone 용 프로그래밍)에서 클릭 한 버튼을 읽으려고합니다. 다음Obj-C Switch 문 정수 변수 iPhone

내 FirstViewController.m에 다음 UIActionSheet에 대한

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    int countarray=[areaselectArray count]; 
    switch (buttonIndex) { 
     case countarray: //cancel button has been pressed 
      //do stuff 
      break; 
     default: 
      area = [areaselectArray objectAtIndex:(buttonIndex)]; 
      [[NSUserDefaults standardUserDefaults] setObject:area forKey:@"mulValue"]; 
      [areaselectArray release]; 
      NSLog(@"Released areaselectArray"); 
      break; 
    } 
} 

버튼은 앞서 구축 (아직 발표하지 않은) 배열에서 내장되어 있습니다. 제 UIActionSheet를 할당 할 때

int countarray=[areaselectArray count];  
[areaselect.cancelButtonIndex = countarray;] 

을 사용하여 취소 버튼을 목록의 끝에 배치합니다. 버튼의 양은 배열의 항목 수에 따라 달라 지므로 UIActionSheet를 단순히 취소하기 위해 "Cancel"버튼을 원하지만 다른 모든 인스턴스에서는 Switch 명령문이 클릭 한 버튼의 값을 "mulValue "standardUserDefaults에 있습니다.

이렇게 할 방법이 있습니까? 내 주요 문제는 당연히 당장 스위치 기능은 (예를 들어 countarray와 같은) 변수를 사용하지 않는다는 것입니다. switch 문을 입력하기 전에 상수 (?)에 값을 쓰는 방법이 있습니까?

미리 감사드립니다.

답변

2

왜 당신이 경우 문 대신 사용하지 마십시오 switch-statement? cancelButtonIndex 속성을 사용하여 취소 버튼을 감지 할 수 있습니다.

if (buttonIndex == actionSheet.cancelButtonIndex) { 
    // cancel button has been pressed 
    // do stuff 
} 

또한 버튼 비교를 위해 제목 문자열을 사용할 수 있습니다. 그러나 버튼 제목은 현지화되어있을 수 있습니다. 조심해.

NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex]; 
if ([buttonTitle isEqualToString:@"Cancel"]) { 
    // cancel button has been pressed 
    // do stuff 
} else { 
    // 
} 
+0

괜찮습니까? 그게 해결! 답변 주셔서 감사합니다! – Moloch

0

당신이 발견 한 것처럼 상수 만 '사례'뒤에 올 수 있습니다. switch 문에서 변수가 비교되는 값은 컴파일시 알려 져야합니다.

원하는 기능을 얻으려면 if/else 구문을 사용하십시오. 그처럼 간단합니다. ;)

편집 :

그리고, 없는 (때문에) 나는 이전에 언급 한 것과이 의지 하지 컴파일 :

int n = 4; 
const int a = someVariable; 
switch (n) { 
    case a: 
     printf("hi"); 
     break; 
}