2009-04-07 5 views
1

다음 메서드는 배열의 데이터를 UITableView의 사용자 지정 셀로로드합니다. 데이터가 올바르게로드됩니다. 그러나 위의 셀 (셀이 보이지 않음)의 데이터를 스크롤하면 배열의 겉보기에 임의의 요소로 변경됩니다.처음에 올바르게로드 된 UITableView 셀

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    cellComments=nil; 
    cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID]; 
    if(cellComments==nil) 
    { 
     [[NSBundle mainBundle]loadNibNamed:@"FullCommentCell" owner:self options:nil]; 
    } 
    NSString *row = [NSString stringWithFormat:@"#%i",indexPath.row+1]; 
    [cellComments loadFullComments:[latestFMLComments objectAtIndex:(indexPath.row+1)] withCommentNumber:row]; 
    //cellComments.userInteractionEnabled=NO; 
    return cellComments; 
} 

또한 셀을 클릭 할 때 다음과 같은 방법으로 처리합니다. 셀의 데이터가 배열의 임의의 요소로 바뀌면 - 셀을 클릭하면 (아래 메서드가 호출 됨) 셀의 데이터가 올바른 데이터로 변경됩니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[self tableView:tableView cellForRowAtIndexPath:indexPath]; 
} 

왜 이런 일이 일어나는가?

답변

0

UITextView를 다중 행 UILabel로 변경 했으므로 이제 모든 것이 작동합니다. 왜 이것이 차이가 나는지 잘 모르겠다.하지만 어쨌든 작동한다. :)

1

캐시 된 셀을 사용하고 있는데,로드 확률이 올바르게 셀의 subvview 요소를 다시 설정하지 않는 것이 좋습니다.

+0

하위 뷰 요소를 재설정하면 어떻게됩니까? – zpesk

1

Elfred는 올바른 생각을 가지고있다.

cellComments=(FullCommentCell *)[tableView dequeueReusableCellWithIdentifier:FullCommentCell_ID]; 

메서드 호출을 사용하는 경우 등 레이블, 이미지, 텍스트와 같은 하위 뷰/속성을 해당 셀에있는 모든 시간이 설정되어 있는지 확인해야합니다. 내용물이없는 "신선한"세포를 얻는다고 가정 할 수는 없습니다.

예를 들어 인덱스 17에 셀을 표시 할 때 테이블 뷰는 이전에 인덱스 3에서 재사용 가능한 셀을 대기열에서 제외 할 수 있습니다.이 셀은 인덱스 3에 있었던 것과 동일한 특성을 가지며 사용자의 책임입니다 그들을 재설정하십시오. 예 : "I 'm Cell 3"에서 "I 'm Cell 17"로 텍스트 변경.

+0

그게 아니에요 그냥 UITextView의 텍스트를 설정로드 주석 방법으로 뭐하는거야 ??? – zpesk

+0

아, 그 방법이 무엇인지 알지 못했습니다. 해당 메소드를 통해 디버그하고 셀이 개별적으로 어떻게 업데이트되는지 확인할 수 있습니다. 이전/임의 데이터가있는 셀은 내용을 올바르게 설정하지 않고 셀을 재사용하는 전형적인 증상입니다. –