- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
이 메소드는 테이블의 각 셀을 반환하는 메소드이다.
여기서 테이블의 셀이 선택되었는지를 비교해야한다. 즉 인수로 넘어온 index와 테이블에 선택된 index가 같으면 선택되었을때의 셀을 반환하면 되고 아니면 보통의 셀을 반환하면 된다.
if (indexPath == [tableView indexPathForSelectedRow]) {
return SelectedCell;
} else {
return NormalCell;
}
이것만으로는 부족하다. 왜냐하면 화면에 테이블이 나오는 시점은 모든 셀을 그려버린 상태이기 때문이다. 그러면 셀을 선택한 순간에 선택한 셀을 다시 그려주면 된다.
셀을 선택하면 UITableViewDelegate의 didSelectRowAtIndexPath 메소드가 호출된다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
이 곳에서 셀을 다시 그리라고 아래의 메소드를 호출한다.
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
indexPaths는 indexPath의 배열이다. 즉 다수의 셀을 한번에 그릴수 있다.
두번째 인자는 에니메이션 효과이다.
UITableViewRowAnimationFade UITableViewRowAnimationRight UITableViewRowAnimationLeft UITableViewRowAnimationTop UITableViewRowAnimationBottom UITableViewRowAnimationNone
그러면 테이블의 셀을 선택하면 didSelectRowAtIndexPath가 호출되고 이곳에서 reloadRowsAtIndexPaths메소드를 이용하여 셀을 다시 그리게끔 한다.
끝인가? 아니다.
다른 셀을 선택하게되면 새롭게 선택한 셀을 다시 그리지만 선택되었던 셀을 다시 그릴수 없다. 그래서 아마도 하얗게(혹은 배경색으로) 변할 것이다.
이를 위해서 다른 셀을 선택할때 기존에 선택된(포커스를 잃어버리게 되는) 셀도 다시 그려줘야 한다.
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
위의 메소드가 선택되었다가 선택되지 않은 상태가 될때(Deselect) 호출되는 메소드이다. 여기서도 위의 reload메소드를 이용하여 다시 그려준다.
하나더!
만약에 셀의 크기가 다르다면? 즉 높이가 다르다면..
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
셀의 높이를 반환하는 메소드이다. 여기서 셀이 선택되었는지 아닌지를 비교해서 높이를 반환하면 된다.
'smells digital' 카테고리의 다른 글
[아이폰 개발 서적] 프로그래밍 오브젝티브 씨 2.0(Programming Objective C 2.0) (0) | 2009.12.17 |
---|---|
제로보드 : 설치후 에러(timezone, header information) (0) | 2009.12.06 |
맥북 배터리 (2) | 2009.11.16 |
아이팟 1611 에러~ (0) | 2009.11.09 |
XE - JSON 모듈 만들기 (2) | 2009.08.06 |