더 늘어나면서 추가되는걸 구현하려고 하는데요. (데이터는 한번에 10개씩 파싱해서 가져옵니다.)
처음에 맨위(index.row ==0) 의 셀부터 10개의 데이터와 맨밑인 11번째 셀((index.row ==10)에 "10개 더 불러오기"는
제대로 표시가 됩니다. 셀 높이는 한번에 7개씩 보일 정도의 크기이구요.
그런데 테이블뷰를 11번째 셀이 보이도록 맨 위로 한번 올리고 나면 위에서 두번째(index.row ==1) 셀의 내용이
파싱해서 가져온 내용이 아니라 "10개 더 불러오기"로 바뀝니다. 두번째 셀은 화면에서 사라졌다가 나타난 셀이구요.
테이블뷰를 잡고(?) 끝까지 올렸다 내렸다 몇번 하면 하면 화면에서 사라졌던 셀들이 몇개 더 "10개 더 가져오기"로
바뀌구요. if ([indexPath row] < [dataArray count]) 이 부분을 == 로 바꿔서도 해보고
조건과 그안의 내용을 바꾸면서 여러번 시도해봤는데 결과는 똑같네요...혹시나 해서 각 셀마다 로그를 찍어봐도
저 조건에 두개가 같아지는 때는 맨 마지막 셀이 화면에 나타날때 뿐인데 실제 보여지는 내용은
왜 그렇게 달라지는지 모르겠습니다. 제가 어디를 잘못한건지....;; 아무리 봐도 모르겠어요ㅠ
아시는분 계시면 알려주세요~~제발ㅠㅠㅠ 밤새고 몽롱한 상태에서 썼더니 글 내용이 좀...말이 이상한것 같네요-_-
(10개 더 불러오기를 눌러서 파싱해서 가져오는 데이터를 보면 10개씩 증가하면서
파싱하고 저장은 제대로 되고 있습니다. 실제로 셀이 보여지는 개수도 11개에서 21개, 31개 제대로 늘어나고 있구요.
단지 셀의 표시 내용이 제 의도에 안맞게 자꾸 바뀌는게 문제입니다....
http://cafe.naver.com/mcbugi/48620 이글을 보고 해봐도 안돼요ㅠ)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSInteger row = [indexPath row];
if ([indexPath row] < [dataArray count]) { // 인덱스는 0~9, 0~19 이런식이고 데이터 수는 10개, 20개 이런식이라서
if (cell == nil) { // 이 조건이 틀리게 되면 ( [indexPath row] == [dataArray count] )
// else 로 가서 더보기가 나타날거라고 생각하고 이렇게 만들었습니다-.-
[[NSBundle mainBundle] loadNibNamed:@"ListCustomCell" owner:self options:nil];
cell = listCustomCell;
}
NSDictionary *rowData = [dataArray objectAtIndex:row];
UILabel *lblTitle;
UILabel *lblDate;
UILabel *lblHits;
lblTitle = (UILabel *)[cell viewWithTag:1];
lblTitle.text = [rowData objectForKey:@"title"];
lblDate = (UILabel *)[cell viewWithTag:2];
lblDate.text = [rowData objectForKey:@"date"];
lblHits = (UILabel *)[cell viewWithTag:3];
lblHits.text = [rowData objectForKey:@"hits"];
}
else {
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
cell.textAlignment = UITextAlignmentCenter;
cell.textLabel.text = @"이전 10개 불러오기";
}
return cell;
}
================================================================
아래가 수정 후 제대로 돌아가는 소스입니다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// static NSString *CellIdentifier = @"Cell"; // 이름을 달리하여 두개를 만들어 각 각 if, else문 안으로 옮김
//
// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSInteger row = [indexPath row];
if ([indexPath row] < [dataArray count]) {
static NSString *CellIdentifier = @"ListCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"ListCustomCell" owner:self options:nil];
cell = listCustomCell;
}
NSDictionary *rowData = [dataArray objectAtIndex:row];
UILabel *lblTitle;
UILabel *lblDate;
UILabel *lblHits;
lblTitle = (UILabel *)[cell viewWithTag:1];
lblTitle.text = [rowData objectForKey:@"title"];
lblDate = (UILabel *)[cell viewWithTag:2];
lblDate.text = [rowData objectForKey:@"date"];
lblHits = (UILabel *)[cell viewWithTag:3];
lblHits.text = [rowData objectForKey:@"hits"];
}
else {
static NSString *CellIdentifier = @"LoadMoreCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
cell.textAlignment = UITextAlignmentCenter;
cell.textLabel.text = @"이전 10개 불러오기";
}
return cell;
}
'프로그래밍 > iOS' 카테고리의 다른 글
iOS 개발자 라이센스 비교 (0) | 2011.07.13 |
---|---|
webview에서 Link 클릭했을때 이벤트 얻기 (0) | 2011.07.12 |
UIImageView에 원격이미지 비동기 로드 및 캐쉬 기능 넣기 (0) | 2011.07.04 |
PHP로 구현하는 APNS (아이폰 푸쉬 서비스) (1) | 2011.07.04 |
uiview trasition(UIView 좌우 슬라이드) (0) | 2011.06.24 |