본문 바로가기
프로그래밍/iOS

UITableView

by 백룡화검 2011. 5. 21.

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