다양한 유형의 항목 목록이있는 내 tableViewController는 모달 대화 상자를 표시하는 버튼을 제공합니다. 이 대화 상자 (경고보기와 유사)는 6 개의 옵션 목록에서 독점적 인 선택을 사용자에게 제공합니다. 사용자가 선택하고 확인한 내용에 따라 주 테이블 뷰 컨트롤러 화면의 목록은 필터링되어 선택된 유형과 일치하는 항목 만 표시됩니다. 현재이 6 가지 유형이 typedefed enum에 나와 있습니다. 여태까지는 그런대로 잘됐다. 그러나 열거 형에 사용 된 유형과 이름이 일치하는 여섯 개의 nsstrings을 사용자 정의 대화 상자에 채울 수 있어야합니다. 이 열거 형을 문자열의 소스에 대한 요구 사항과 어떻게 조정할 것인가? 그러나이 두 열의 일정한 수준을 유지할 수 있도록하는 방법은 무엇입니까? 나는 아무것도 하드 코딩하고 싶지 않다.대화 상자의 열거 형
답변
각 열거 형 값에 대한 문자열을 반환하는 도우미 메서드가 필요합니다. 이것은 가능한 지역화를 다루기 위해 작성되어야합니다. 모든 데이터 및 이벤트 처리는 enum 값을 기반으로해야합니다. 문자열은 표시에 사용해야합니다.
도우미 메서드는 열거 형 값을 사용하고 적절한 문 자열을 반환하려면 switch 문을 사용해야합니다.
나는 몇 가지 생각할 수 :
- 변경 문자열의 무리에 열거. 이렇게하면 정수가되어야하는 경우 작업을 약간 지루하게 만듭니다 (
-[NSArray indexOfObject:]
). 문자열의 C 배열을 만듭니다. 위를 할
NSString * const names[] = { [Foo] = @"Foo", [Bar] = @"Bar", };
자동 생성 코드 : 이것은 당신이 C99의 편리한 구문을 사용할 수 있습니다.
주의 사항은 :
- 이 두 국제화 오히려 고통스러운 것. 이것은 하나의 언어 일 필요가있는 계약 업무 일 경우 관련이 없지만 나쁜 습관입니다.
- 단추 인덱스를 키로 사용하는 것은 중간에 단추를 제거해야한다고 결정할 때까지 작동합니다. 문자열 키는 일반적인 경우에 훨씬 잘 작동합니다. (키, 제목) 쌍을 받아들이고 단추 인덱스 대신 키를 반환하는 UIAlertView/UIActionSheet 래퍼를 작성했습니다.
코드에 문자열 상수가 필요 없다는 것을 의미하는 "모든 것을 하드 코딩하고 싶지 않다"는 귀하의 의견을 말씀드립니다. 따라서 :
시트의 UI 요소 (예 : 확인란)에 문자열을 할당하고 해당 UI 요소에 열거 형과 일치하는 태그 값 (시트를 닫을 때 쿼리 할 수있는 태그)을 지정하기 만하면됩니다. 이렇게하면 시트를 쉽게 현지화 할 수 있다는 추가적인 이점이 있습니다.
또는이 :
당신이 문자열이 시트에서 분리 유지하려면, 당신은 .strings 파일을 만들 수 있습니다 (아마 당신은 열거를 호출 할 수 있습니다.문자열이나이 같은 일부 등) 포맷 뭔가 :
"001" = "string one";
"002" = "string two";
.
.
"010" = "string ten";
당신은 다음과 같이 당신의 열거 값을 사용하여 문자열을 검색 할 수 있습니다 :
NSString *myString = NSLocalizedStringFromTable([NSString stringWithFormat:@"%03d", myEnumerationValue], @"Enumeration", @"");
을하지만 당신은 연결의 방법을 가지고해야 할 것 문자열을 UI에 입력하고 IBOutlet
을 통해 UI 요소를 추적합니다. 여기서 세 자릿수를 사용했습니다. 아마도 당신은 둘 또는 심지어 하나를 가지고 얻을 수 있습니다. 마지막으로, 첫 번째 제안 에서처럼 현지화 할 수 있습니다.
- 1. 열거 형 내의 열거 형
- 2. 열거 형 내의 열거 형
- 3. DB의 열거 형 또는 열거 형 열거 형
- 4. 복합 형 열거 형
- 5. 다른 열거 형 값에 열거 형 지정
- 6. 열거 형 대 강력한 형식의 열거 형
- 7. 열거 형?
- 8. 열거 형
- 9. 다른 열거 형의 열거 형
- 10. 클래스가 열거 형 (또는 열거 형 일 필요)
- 11. 목록 열거 형 값 열거 형 PHP mysql
- 12. 열거 형 'UIViewAnimationCurve'에서 다른 열거 형 'UIViewAnimationTransition'으로의 암시 적 변환
- 13. 열거 형 값 열거 형 정의를 얻는 방법?
- 14. 열거 형 값을 별도의 열거 형 형식으로 다시 사용
- 15. 열거 형 이해
- 16. 자바 : 익명 열거 형?
- 17. 열거 형 변환 캐스팅
- 18. 상위의 Java 열거 형
- 19. Javascript의 자동 열거 형
- 20. JSP 내부의 열거 형
- 21. Java의 열거 형 이해
- 22. 전달 열거 형 인수
- 23. 인터페이스 대 열거 형
- 24. 열거 형 확장
- 25. EF5의 외부 열거 형
- 26. 열거 형 상자에서 메서드
- 27. Regex MySQL에서 열거 형
- 28. 열거 형 및 상속
- 29. 처리 2.0의 열거 형
- 30. DirectoryInfo 열거 형
'typedef enum' 대신 NSString의 배열을 저장하고 두 개를 비교하는 것이 어떻습니까? – mkral
나는 그 열거 형을 없앨 수 없다. 그것은 그 응용 프로그램의 다른 곳에서 사용되고있다. 그것은 꽤 복잡한 프로젝트이다. 문제는 분명히 열거 형이 enum 이름을 얻는 방법을 제공하지 않는다는 것인데, 단지 멋진 int 일뿐입니다. –
@mkral 그런 해결책은 현지화를 잘 처리하지 못합니다. 라벨은 바로 라벨이어야합니다. 열거 형은 데이터를 나타냅니다. – rmaddy