section 과 cell 로 구성된다.
테이블은 여러개 section을 가질수 있고, 각 section은 여러개의 cell로 구성된다.
델리게이트는 UITableViewDataSource 프로토콜과 UITableViewDelegate가 있다.
UITableViewDataSource : 섹션 개수, 섹션 내의 셀 갯수, 각 셀의 모습 담당
UITableViewDelegate : 셀 높이, 섹션 해더, 섹션 푸터, 셀 선택 이벤트 담당
//섹션 개수 반환
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
//각 섹션의 셀개수 반환
-(NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
//각각의 셀 객체 반환 (셀 ID로 재사용 뷰를 구분)
#define CELL_ID @"CELL_ID"
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_ID] autorelease];
}
else
{
NSLog(@"reusing cell!");
}
cell.textLabel.text = [data objectAtIndex:indexPath.row];
return cell;
}
UITableviewCell => 테이블의 컨텐츠 표시하기 위한 뷰
스타일이 4가지가 있다. (UITableViewCellStyleDefault, Subtile, Value1, Value2)
원한다면 커스텀 셀 만드는것도 가능함.
또 다른 프로퍼티들
textLable.text
detailTextLable.text
ImageView
accessoryType => 셀 오른쪽끝에 버튼을 추가할수 있는 속성(4가지있음)
- UITableViewCellAccessoryDetailDisclosureButton 으로 지정시 둥근 버튼이 생기는데
그 버튼을 클릭시 아래있는 델리게이트 메소드가 호출됨
tableView:accessoryButtonTappedForRowWithIndex:Path
셀 선택시 호출되는 델리게이트 메소드
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
편집모드 : 삭제/ 추가 / 이동
편집모드 변경 프로퍼티 : table.editing = YES /NO
// 셀이 편집 상태일때 셀별 편집스타일 적용 (셀 개수마다 호출) 기본으로 삭제 스타일임.
- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleDelete; // 삭제스타일
return UITableViewCellEditingStyleInsert; // 추가스타일
return UITableViewCellAccessoryNone; // 편집안
}
편집상태에서 추가버튼 누르거나 또는 삭제버튼 눌렀을때 나오는 delete버튼 누를경우 호출되는 델리게이트 메소드
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(editingStyle == UITableViewCellEditingStyleDelete)
{
[data removeObjectAtIndex:indexPath.row];
//테이블 변경시 다시 그린다.( 데이터소스의 섹션과 열 개수 다시 질의)
[table reloadData];
}
}
//셀이동 메소드(2개)
//편집 모드일때 셀이 이동 가능한지를 반환(YES이면 셀 오른쪽에 이동이미지 표시됨)
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
//셀이 이동후에 호출됨
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
'프로그래밍 > iOS' 카테고리의 다른 글
도전! 아이폰4 프로그래밍 목차 (0) | 2011.05.21 |
---|---|
터칭 아이폰 sdk 3.0 목차 (0) | 2011.05.21 |
더 빠르게 HTTP 서버에서 이미지 다운로드하는 방법 (0) | 2011.05.21 |
How to get root(key) window - 최상위 윈도우 알아내기 (0) | 2011.05.21 |
아이폰 개발 소스모음 (0) | 2011.05.21 |