2012-12-07 4 views
0

다양한 유형의 항목 목록이있는 내 tableViewController는 모달 대화 상자를 표시하는 버튼을 제공합니다. 이 대화 상자 (경고보기와 유사)는 6 개의 옵션 목록에서 독점적 인 선택을 사용자에게 제공합니다. 사용자가 선택하고 확인한 내용에 따라 주 테이블 뷰 컨트롤러 화면의 목록은 필터링되어 선택된 유형과 일치하는 항목 만 표시됩니다. 현재이 6 가지 유형이 typedefed enum에 나와 있습니다. 여태까지는 그런대로 잘됐다. 그러나 열거 형에 사용 된 유형과 이름이 일치하는 여섯 개의 nsstrings을 사용자 정의 대화 상자에 채울 수 있어야합니다. 이 열거 형을 문자열의 소스에 대한 요구 사항과 어떻게 조정할 것인가? 그러나이 두 열의 일정한 수준을 유지할 수 있도록하는 방법은 무엇입니까? 나는 아무것도 하드 코딩하고 싶지 않다.대화 상자의 열거 형

+0

'typedef enum' 대신 NSString의 배열을 저장하고 두 개를 비교하는 것이 어떻습니까? – mkral

+0

나는 그 열거 형을 없앨 수 없다. 그것은 그 응용 프로그램의 다른 곳에서 사용되고있다. 그것은 꽤 복잡한 프로젝트이다. 문제는 분명히 열거 형이 enum 이름을 얻는 방법을 제공하지 않는다는 것인데, 단지 멋진 int 일뿐입니다. –

+1

@mkral 그런 해결책은 현지화를 잘 처리하지 못합니다. 라벨은 바로 라벨이어야합니다. 열거 형은 데이터를 나타냅니다. – rmaddy

답변

2

각 열거 형 값에 대한 문자열을 반환하는 도우미 메서드가 필요합니다. 이것은 가능한 지역화를 다루기 위해 작성되어야합니다. 모든 데이터 및 이벤트 처리는 enum 값을 기반으로해야합니다. 문자열은 표시에 사용해야합니다.

도우미 메서드는 열거 형 값을 사용하고 적절한 문 자열을 반환하려면 switch 문을 사용해야합니다.

1

나는 몇 가지 생각할 수 :

  • 변경 문자열의 무리에 열거. 이렇게하면 정수가되어야하는 경우 작업을 약간 지루하게 만듭니다 (-[NSArray indexOfObject:]).
  • 문자열의 C 배열을 만듭니다. 위를 할

    NSString * const names[] = { 
        [Foo] = @"Foo", 
        [Bar] = @"Bar", 
    }; 
    
  • 자동 생성 코드 : 이것은 당신이 C99의 편리한 구문을 사용할 수 있습니다.

주의 사항은 :

  • 이 두 국제화 오히려 고통스러운 것. 이것은 하나의 언어 일 필요가있는 계약 업무 일 경우 관련이 없지만 나쁜 습관입니다.
  • 단추 인덱스를 키로 사용하는 것은 중간에 단추를 제거해야한다고 결정할 때까지 작동합니다. 문자열 키는 일반적인 경우에 훨씬 잘 작동합니다. (키, 제목) 쌍을 받아들이고 단추 인덱스 대신 키를 반환하는 UIAlertView/UIActionSheet 래퍼를 작성했습니다.
1

코드에 문자열 상수가 필요 없다는 것을 의미하는 "모든 것을 하드 코딩하고 싶지 않다"는 귀하의 의견을 말씀드립니다. 따라서 :

시트의 UI 요소 (예 : 확인란)에 문자열을 할당하고 해당 UI 요소에 열거 형과 일치하는 태그 값 (시트를 닫을 때 쿼리 할 수있는 태그)을 지정하기 만하면됩니다. 이렇게하면 시트를 쉽게 현지화 할 수 있다는 추가적인 이점이 있습니다.

또는이 :

당신이 문자열이 시트에서 분리 유지하려면, 당신은 .strings 파일을 만들 수 있습니다 (아마 당신은 열거를 호출 할 수 있습니다.문자열이나이 같은 일부 등) 포맷 뭔가 :

"001" = "string one"; 
"002" = "string two"; 
. 
. 
"010" = "string ten"; 

당신은 다음과 같이 당신의 열거 값을 사용하여 문자열을 검색 할 수 있습니다 :

NSString *myString = NSLocalizedStringFromTable([NSString stringWithFormat:@"%03d", myEnumerationValue], @"Enumeration", @""); 

을하지만 당신은 연결의 방법을 가지고해야 할 것 문자열을 UI에 입력하고 IBOutlet을 통해 UI 요소를 추적합니다. 여기서 세 자릿수를 사용했습니다. 아마도 당신은 둘 또는 심지어 하나를 가지고 얻을 수 있습니다. 마지막으로, 첫 번째 제안 에서처럼 현지화 할 수 있습니다.