2010-06-08 3 views
0

왜 그런지 모르겠지만 UITableView는 놀라운 것이 아니며 반복해서 표시해야합니다.내 UITableView에 행이 중복되어 있습니다.

사용자가 스크롤 할 때 추가되는 행 (예 : 화면 외부의 행)이 잘못된 행 색인의 데이터를 가져 오는 것 같습니다. 거의 새로운 셀이 대기열에서 빠져 나왔을 때 사용 된 셀을 사용하고 있지만 올바르게 정리되지 않았습니다.

대기열에있는 셀을 정리하여 새 셀에 이미 생성 된 셀을 사용하지 않아야합니까?

내 코드는 다음과 같습니다 :이 코드를 잘못 아무것도

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; 

    MyDayCell *cell = (MyDayCell *)[tableView 
             dequeueReusableCellWithIdentifier: CustomCellIdentifier]; 

    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 

     for (id oneObject in nib) 
      if ([oneObject isKindOfClass:[MyDayCell class]]) 
       cell = (MyDayCell *)oneObject; 

    } 

    NSUInteger section = [indexPath section]; 
    NSUInteger row = [indexPath row]; 
    NSArray *thisSectionItems = (NSArray*)[self.listData objectForKey: [[NSNumber alloc] initWithInt:section]]; 
    MyDayDetails *rowData = [thisSectionItems objectAtIndex:row]; 

    //setup my cells data here... 

    return cell; 
} 

있습니까?

누구나 전에 이런 걸 본 적이 있습니까?

답변

1

세포는 재사용되어야합니다. 이 기능을 해제하려면 셀 재사용을 해제하십시오.

코드에 실제로있는 문제는 이 아니기 때문에이 포함됩니다.

//setup my cells data here... 

이 코드는 테이블의 행간에 서로 다른 셀의 모든 부분을 완전히로드하는 코드입니다. 그 데이터가 두 번 이상 나타납니다? 당신은 그것을 가지고있는 경우에 그것을 설정해야하며, 그렇지 않으면 그것을 깨끗하게해야합니다. 예를 들어

: 그런 식으로

cell.textLabel.text = str ? str : @""; 

는 같은 몇 가지 세포를 통해 사용되며 다시 및 테이블 셀 자주 설정하고 파괴 할 필요가 없습니다.

(내가 언급 한 바와 같이, 당신은 세포의 재사용을 해제 할 수 있습니다. 그러나 당신이이 일을해야합니다.)

+0

그래, 이해가된다. 그리고 내가 구현 한 것, 그 덕분이다. – Mark

0

제가 해결했다고 생각합니다. else 문을 세포에 채워진 값 if (cell == nil) 블록에 추가해야합니까?

이 작업을 수행하는 올바른 방법입니까?

+0

당신은 "내 세포 데이터 // 여기에 설정 ..."당신의 값을 변경하지 있습니까 섹션을 어쨌든 ? 먼저 채워진 값을 명시 적으로 정리해야한다고 생각하지 않습니다. –

+0

일종의, 그냥 설정해야하는 설정, 이전 정보를 청소하지. – Mark

관련 문제