인덱스를 구현해 보겠습니다
이번에 인덱스를 구현해보겠습니다.
잘됩니다
테이블 뷰에서 인덱스는 테이블 뷰에 그룹이 많고 셀의 수가 많을 경우
스크롤해서 내려가기 힘들때 쓰는 기능입니다
인덱스는 테이블뷰의 오른쪽에 위치하며 쉽게 찾을수 있도록 도와줍니다
인덱스 하는데 필요한 함수는 다음과 같습니다
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;
사용방법은 간단합니다
sectionIndexTitlesForTableView함수로 사용할 인덱스 리스트를 NSArray형식으로 만들어서 돌려주면 됩니다
코딩하면서 설명 하겠습니다
우선 현재 그룹이 두개 뿐이니 알아보기 쉽도록
그룹을 잔뜩 늘려 보겠습니다
그룹을 추가하는 부분의 코드를 적당히 복사 붙여넣기를 반복합니다
적당히 그룹이 많아졌습니다
이번에 인덱스를 구현해보겠습니다.
우선 간단히
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [NSArray arrayWithObject:@"test"];
}
해봤습니다
인덱스에 뜨긴 했습니다만 (뭔가 초라;;;)
이번엔 제대로 인덱스를 만들어 보겠습니다
테이블뷰의 인덱스 함수는 인덱스에 쓸 리스트를 NSArray로 받습니다
다만 무조건 배열에 NSString을 받습니다
NSArray {
NSString,
NSString,
NSString,
NSString,
...
}
그래서 현재 myList변수에 데이터가 있긴해도 이걸 그냥 넘겨 버리면 에러나버립니다
그래서 그룹 헤더만 뽑도록 해보겠습니다
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
NSMutableArray *arr = [NSMutableArray array];
for (int i = 0; i < [myList count]; i++) {
[arr addObject:[[myList objectAtIndex:i] objectForKey:@"grouptitle"]];
}
return arr;
}
NSMutableArray또한 NSArray와 동일 취급됩니다
코딩하고 돌려 보겠습니다
인덱스를 터치하면 해당 그룹으로 이동됩니다
간단한 인덱스 기능은 이걸로 끝입니다만
이건 어디까지나 인덱스에 사용된 배열의 수가 그룹수와 같은 경우이고
인덱스 메뉴를 수정하여 그룹수와 다를 수도 있습니다
그것을 위한 함수가
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
입니다
인덱스가 터치 될때 이 함수가 호출되며 index인자로 인덱스중 몇번째가 눌러졌는지 알려줍니다
그러면 어느 그룹으로 이동할것인지 돌려주면 됩니다
이 함수를 구현 안하면
return index;와 같은 뜻이 됩니다
이 함수를 구현하기 전에 인덱스 리스트부터 좀 만져 보겠습니다.
인덱스 구현 함수를 다음과 같이 수정합니다
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:@"처음"];
[arr addObject:@"끝"];
[arr addObject:@""];
for (int i = 0; i < [myList count]; i++) {
[arr addObject:[[myList objectAtIndex:i] objectForKey:@"grouptitle"]];
}
return arr;
}
이렇게 해서 새로운 인덱스를 추가 했습니다
아까 같이 그룹명을 선택하면 그 그룹으로 이동될리가 없습니다
처음이라는 인덱스를 선택 하면 처음으로 끝을 선택하면 마지막 그룹으로 가게 해야 합니다
이대로 돌려보면
끝을 선택 했을때 두번째 그룹으로 이동해 버립니다
이번에는 방금 언급한 새로운 함수를 구현해보겠습니다
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
if (index == 0) return 0;
if (index == 1) return [myList count] - 1;
if (index == 2) return 0;
return index - 3;
}
index가 3보다 작을경우 보통 인덱스가 아닌 다른 것이죠
0일경우 처음이니 0을 돌려주고
1일 경우 '끝'이라 했으니 그룹의 마지막 번호를 돌려주고
2는 빈칸이지만 대충 0을 돌려 줬습니다
나머지는 인덱스에서 그룹1이 선택 되었을 경우 그룹 번호는 0이지만 이상황에서 index는 3이니
즉 밀린 3만큼 뺴준 값을 돌려주면 되겠죠
돌려 보겠습니다
잘됩니다
'개발 > App Developer' 카테고리의 다른 글
메소드와 메세지 (0) | 2010.09.06 |
---|---|
HIG 번역하다 말았네요 (0) | 2010.09.06 |
IB 없이 하기, UITableView끝장보기 (6) 커스텀 셀 (0) | 2010.09.01 |
UITableView 에 Header, Footer를 넣어보자 (0) | 2010.09.01 |
제공 함수 도움말 바로 링크 (0) | 2010.09.01 |