전 장에 이어 델리게이트를 구현해 보겠습니다.
전 장의 마지막 스샷입니다. 테이블 뷰의 헤더
데이터소스 프로토콜에서 반드시 넣어야 하는 두 함수 먼저 사용해 보겠습니다.
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
대충 이 두개만 구현하면 기본 테이블뷰가 구현됩니다
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
이 함수는 특정 그룹(섹션)에 몇개의 셀(row)가 있는지 물어보는 겁니다
답변은 return (숫자); 로 해주면 되겠죠
인자, 파라메타로 달려온 것을 보시면 table과 section이 있습니다
table은 그 테이블뷰의 주소입니다 즉 클래스 변수인 myTable과 같은 값입니다
나중에 다수 테이블을 구현하실때 구분용으로 사용됩니다.
section은 셀 갯수 물어볼때 어느 그룹인지 번호로 들어있습니다
몇개의 그룹(섹션)인지 지정하지 않았으므로 무조건 0이 딸려옵니다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
이 함수는 특정 셀의 데이터를 묻는 함수 입니다
자세한건 좀있다 적겠습니다
이와 같이 헤더에서 프로토콜을 지정하고
약속된 함수를 만들어 두면 테이블 뷰에서 데이터가 필요할때 위 함수들을 알아서 호출하게 됩니다
그래서 위에 두개는 필요 최소한의 것들이라 없으면 메세징 에러 뜨고 튕기게 됩니다.
이제 코드를 작성해 보겠습니다.
우선 5를 돌려줌으로서 셀이 5개라고 알려줬습니다
다음은 셀을 구현하는건데요 테이블 뷰의 경우 좀 특이한 기능이 있습니다 바로 셀의 재사용입니다 셀이 아무리 많아봤자 화면이 작은 아이폰에 띄우는데 한계가 있기 때문에 리스트가 많을경우 전부 메모리로 만들어 버리면 낭비입니다 모바일 기기의 특성이 적용된 기능이라 보시면됩니다 화면을 스크롤 할때 반드시 한쪽 방향의 셀이 사라지게 됩니다. 그럼 그 셀을 다시 불러다 데이터만 다른걸로 씌워서 보여주는거죠 그 기능을 하는 코드가
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"testcell"]; 이것입니다 테이블뷰가 여러개 이거나 셀의 종류가 다를경우 식별코드를 바꿔서 사용하시면 됩니다 테이블 뷰에 식별코드를 주어서 노는 셀이 있는지 받아옵니다 노는셀 즉 화면밖으로 사라진 셀이 있으면 재사용 하고 없으면 새로 선언해서 만들게 됩니다
if (cell==nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"testcell"] autorelease]; }
* 참고 공부
셀의 재사용 목록은 테이블 뷰에서 자동으로 처리한다.(화면 밖으로 셀이 나가는 경우)
테이블 뷰는 셀 식별자(identifier)를 통해 셀을 구분하여 재사용 여부를 결정한다.
그리고 셀에 대충 데이터를 넣어주고
돌려줍니다
cell.text = @"test";
return cell;
한번 돌려 보겠습니다.
5개의 셀에 test란 문자가 나오네요..
그럼 이번에는 그룹별로 넣어 보겠습니다.
데이터 소스 프로토콜에 있는 옵션 함수 중 하나인
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}
을 사용합니다.
원래 이 함수가 제일 먼저 호출되고 그 다음 각 그룹당 몇개의 셀이 있는 지 묻는
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
함수가 호출됩니다
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return [NSString stringWithFormat:@"test %i",section]; }
전역 변수 : main() 함수 밖에서 초기에 선언되는 변수입니다. 이 변수는 프로그램이 실행과 동시에 생성이 되고 main 함수가 종료될 때 소멸됩니다. 지역 변수: 함수 내부에서 선언 또는 블럭문{} 내에서 선언되는 변수들은 모두 지역 변수 입니다. 지역 변수는 해당 함수 및 블럭문 진입 시점에 생성이 되어서 함수 종료 및 블럭문의 } 을 만났을 때 소멸되는 변수들입니다.
'개발 > App Developer' 카테고리의 다른 글
UITableView - 델리게이트 구현이론(1) (0) | 2010.09.06 |
---|---|
IB 없이 하기, UIButton (0) | 2010.09.06 |
IB 없이 하기, UITableView끝장보기 (3) 셀의 구조 (0) | 2010.09.06 |
IB 없이 하기, UITableView끝장보기 (4) 테이블 편집 (0) | 2010.09.06 |
Foundation Kit (0) | 2010.09.06 |