tableView:cellForRowAtIndexPath
- 셀에 해당하는 뷰를 요청한다.
UITableViewCell 을 상속받는 객체를 리턴해야 한다. (보통 UITableViewCell 을 그냥 사용)
numberOfSectionsInTableView
- 테이블 뷰의 섹션이 모두 몇 개인지를 알려줘야 한다. ( 1 또는 섹션의 수 만큼)
예문)
-(NSInteger)numberOfsectionsInTableView:(UITableView *) tableView{
return [self.history count];
}
tableView:numberOfRowsInSection
- 섹션에 셀이 모두 몇 개 존재하는 지를 묻는다.
전체 항목의 개수를 리턴 (아마 numberOfSectionInTableView 에 이걸 넘겨줘도 될듯..)
예문)
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [[self.history objectAtIndex:section] count];
}
tableView:titleForHeaderInSection
- 헤더 이름을 리턴해야 한다.
이 메서드는 구현하지 않으면 나타나지 않는다.
예문)
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
return [NSString stringWithFormat:@"%d 월 시작", section+1];
}
tableView:titleForFooterInSection
- 푸터 이름을 리턴해야 한다.
이 메서드 역시 구현하지 않으면 나타나지 않는다.
*인덱스 이용
- 여기서 인덱스란 테이블 뷰 오른편에 세로로 표시되며, 스크롤 될 섹션을 손으로 빠르게 선택할 수 있는 기능이다.
인덱스를 사용하기 위해서는 UITableViewDataSource 의 추가 메서드 두개를 구현해야 한다.
sectionIndexTitlesForTableView
- 인덱스에 들어갈 항목을 배열로 리턴해야 한다.
간단하게 A,B,C ... Z 까지의 문자열 배열을 리턴하면 A 부터 Z 까지 인덱스 문자열이 화면에 나타난다.
tableView:sectionForSectionIndexTitle:atIndex:
- 인덱스 영역을 사용자가 선택했을 때 선택한 항목에 해당하는 섹션 번호를 리턴해야 한다.
만약 A 부분을 눌렀다면 A 항목이 몇 번 섹션인지를 리턴하는 것이다.
물론, 인덱스와 섹션 이름이 같을 필요는 없다.
예문)
-(NSArray *) indexArray {
if( indexArray == nil) {
indexArray = [[NSArray arrayWithObjects:@"1월", @"2월".............. , nil] retain];
}
return indexArray;
}
-(NSArray *) sectionIndexTitlesForTableView:(UITableView *)tableView {
return [[self.indexArray retain] autorelease];
}
-(NSInteger) tableView:(UITableView *) tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
return [self.indexArray indexOfObject:title];
}
// indexOfObject : 선택한 인덱스 문자열이 배열의 몇 번째 항목인지 파악하고 같은 인덱스 섹션을 선택하도록 정수값을 리턴
tableView:canEditRowAtIndexPath:
- 이 메소드는 인자로 전달된 행이 편집 가능한지를 묻기 위해 호출된다.
편집 가능하다면 YES 를 반환, 그렇지 않다면 NO 를 반환한다.
편집에서 반드시 구현해야 하는 메소드는 아니다.
tableView:commitEditingStyle:forRowAtIndexPath:
- 이 메소드는 실제 어떤 행을 삭제하거나 삽입하는 동작을 수행하기 위해 호출된다.
사용자가 최종적으로 삭제 버튼을 눌렀을 때 호출된다.
tableView:canMoveRowAtIndexPath:
- 인자로 전달된 행이 테이블 뷰 안에서 다른 위치로 이동 될 수 있는지를 묻기 위해 호출된다.
구현하지 않으면 모든 행이 이동 가능하다.
tableView:canMoveRowAtIndex:toIndexPath:
- 테이블 뷰 안에 특정 위치에 있는 행을 다른 위치로 이동할 것을 데이터 소스에게 알리기 위해 호출된다.
* 정리
어플리케이션은 테이블 뷰 델리게이트를 테이블 뷰에게 제공해야 한다.
이것은 사용자가 테이블 뷰와 상호작용할 때 이것을 처리하기 위한 델리게이트이다.
이것 역시 특별히 기술하지 않으면 UITableViewController 가 자신을 델리게이트로 설정한다.
UITableView 객체의 델리게이트는 반드시 UITableViewDelegate 프로토콜을 구현해야 한다.
이 프로토콜의 메소드는 선택, 섹션 제목과 꼬리말을 관리하고 셀 삭제와 재정렬 그리고 기타 다른 동작을 수행한다.