UILocalizedIndexedCollation 활용한 연락처 만들기

 

보통 UITableView 딜리게이트에 다음의 코드와 같이 알파벳 배열을 넣어주면 우측에 표시가 된다.
아참! 이기능을 사용하기 위해서 테이블의 스타일을 그룹으로 할 경우 작동하지 않음에 유의하시길 바랍니다.

위의 이미지와 같이 우측 섹션인덱스 검색은 매우 유용한 기능이지만 기본적으로 A,B,C,D…. 와 같은 형태로 하면 영어권 국가에서 사용할때 유용하지만 비영어권 언어를 사용하는 국가에서는 효용성이 많이 떨어진다. 대부분 # 부분에 몰려서 나오기때문에 인덱스가 없는 것과 마찬가지의 형태로 리스트가 제공됩니다.

 

애플은 이를 해결하기 위해 해당 언어권의 언어를 기준으로 검색할 수 있는 기본 클래스를 제공하고 있습니다.
이는 UILocalizedIndexedCollation 입니다.

 

이를 활용하면 디바이스가 어느 나라 언어로 설정되어 있어도 아주 간단하게 인덱스를 배열로 생성해줍니다.
사용예제는 다음과 같습니다.

이렇게 하면 자동으로 인덱스가 출력됩니다.

위의 소스를 보면 배열안에 배열을 하나 밀어 넣었는데요 그것은 인덱스 상단에 보이는 검색아이콘을 삽입하기 위한 코드입니다.

검색아이콘이 필요없다면 return 값에  [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles] 이렇게만 작성해주시면 됩니다.

 

나머지 작업은 애플 Reference를 참고해서 작업하시면 되겠습니다
Populating an Indexed List 를 검색하시어 내용을 보시면 쉽게 이해가 가실 겁니다.
대충 어떻게 돌아가는지에 대한 기본 로직에 대해서 간단히 설명하고 마치겠습니다.
섹션타이틀 인덱스 배열에 있는 단어들 하나하나에 셀 데이터를 배열로 넣어 2차배열로 구성합니다.
이를 통해서 테이블 데이터 소스를 뿌려준다고 생각하시면 됩니다.
저의 경우 처음에 딕셔너리로 작업했다가 전부다 바꾸는 경험을 하게 되었는데요!!
여기서 모델클래스를 만들어 활용하시면 아주아주 간단하게 구현하실 수 있습니다.

UILocalizedIndexedCollation 클래스는 인덱스에 따른 배열을 2차원배열로 구성(각각의 인덱스에 해당되는 모델오브젝트 배열을 추가)해주고 인덱스에 해당되는 모델의 프로퍼티만 연결하는 것으로 인덱스를 알아서 구분해주니 정말 쉽죠잉~!! 그럼 예제를 통해 보시면 이해가 더 빠르시리라 생각합니다.

TKAddressBook 이라는 모델 인스턴스들을 addressBookTemp라는 배열에 이미 담았다는 전제조건하에서 아래와 같이 하시면 됩니다. 최종적으로 _addressBooks라는 커스텀 배열 프로퍼티에 지지고 볶고 해서 분리와 정렬을 끝낸후 담아줍니다.
그럼 _addressBooks라는 배열을 이용해서 테이블을 구성하면 되겠죠?

 

 

Reference

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html

Download

https://github.com/qnibus/TKContactsMultiPicker

Published by

안반장

Web과 App 개발을 하고 있으며 최근 워드프레스에 관심이 많아져 네이버 카페 워드프레스 홈페이지의 TF팀으로 활동 중 입니다.개인적으로는 안반장의 개발 노트라는 블로그를 운영하면서 개발의 즐거움과 고충들을 차곡차곡 담아가고 있습니다.