2014-07-16 2 views
3

이 문제에 대해 이미 몇 가지 질문이 있지만 내 문제를 해결할 수 없습니다. 문제는 내가 스크롤하거나 내 UITableView 다시로드 할 때 셀을 중복합니다. 문제는 세포 재사용과 관련이 있다는 것을 알고 있습니다. 나는 정의 셀에 대한 XIB를 사용스크롤 한 후 UITableViewCell이 복제됩니다.

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

static NSString *cellID = @"DividendCell"; 

DividendCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 

if (cell == nil) 
{   
    [tableView registerNib:[UINib nibWithNibName:cellID bundle:nil] forCellReuseIdentifier:cellID]; 
    cell = [tableView dequeueReusableCellWithIdentifier:cellID]; 
} 

dividend *div = [[[aAgendaItems objectAtIndex:indexPath.section] agendaItems] objectAtIndex:indexPath.row]; 
[cell setDiv:div]; 

return cell; 

}

:

여기 http://imgur.com/JrnERSD

내가 셀의 모양을 사용자 정의하는 데 사용하는 코드입니다 : 여기에 잘못 무슨 일이 일어나고 있는지의 스크린 샷입니다 .

누군가 나를 도울 수 있기를 바랍니다.

EDIT : 이것은 데이터가 행에 적용 할 setDiv 메소드에 대한 코드

이다

-(void)setDiv:(dividend *)div { 
NSString *text = [[NSString alloc] initWithString:[[[div RelatedIssue] ShortName] capitalizedString]]; 
[issueName setText:text]; 
[text release]; 

text = [[NSString alloc] initWithString:[div Description]]; 
[issueType setText:text]; 
[text release]; 

text = [[NSString alloc] initWithString:[div Currency]]; 
[issueCurrency setText:text]; 
[text release]; 

text = [[NSString alloc] initWithString:[super formatDouble:[div BrutValue]]]; 
[issueKoers setText:text]; 
[text release]; 

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
NSLocale *loc = [[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]; 
[format setLocale:loc]; 
[format setDateFormat:@"dd MMM"]; 

text = [[NSString alloc] initWithString:[format stringFromDate:[div ExDividendDate]]]; 
[exDividendDate setText:text]; 
[text release]; 

NSComparisonResult result = [[div PaymentDate] compare:[NSDate date]]; 
text = [[NSString alloc] initWithString:[format stringFromDate:[div PaymentDate]]]; 
if (result==NSOrderedAscending) { 
    [exPaymentDate setTextColor:[UIColor darkGrayColor]]; 
} else { 
    [exPaymentDate setTextColor:[UIColor blackColor]]; 
} 
[exPaymentDate setText:text]; 
[text release]; 
[loc release]; 

}

+0

setDiv 메소드에서 이미 셀에있는 것이 있으면 제거하십시오. 또한 왜 당신은 두 번 dequeueing입니까? –

+0

'setDiv' 또는 그것이 호출하는 메소드에 대한 코드를 보여줍니다. 당신은 setDiv 메서드 또는 유사한 테이블 뷰 셀에 하위 뷰를 추가하는 것처럼 보입니다. –

+0

'[cell setDiv : div];에 서브 뷰 ('UILabel')를 추가하지 않으시겠습니까? –

답변

0

나는이 문제를 시험판 & 오류로 해결할 수있었습니다. 이 솔루션은 특정 레이블 경위을 속성을 그리기 보기>에서 이 그래픽 문맥을 삭제 확인란을 선택하는 것이 었습니다. 나는이 상자가 서로 겹치는 곳에있는 라벨을 확인하지 않은 것을 보았다. 정말 이상해. 그러나 행복하게 나는 미치광이를 얻는 1 주일 후에 그것을 고쳤다.

4

셀 재사용되기 때문에 수단은, 그 모두 파단 셀도 재사용되고 있습니다. 셀에 표시되는 모든 것을 설정하거나 재설정해야합니다. 일부 세포가 아닌 다른 사람을 위해 설정 가져옵니다 UILabel의 "자막"이 경우 합법적 인 값을 갖는 경우가 비어 있거나 전무 값, 또는 [subtitle setText:realValueString]의 경우

는 예를 들어, [subtitle setText:@""]에 확인해야합니다. 그렇지 않으면 "이전"셀의 하위보기에서 이전 값을 계속 사용하여 "새"셀에 표시됩니다.

+0

의견을 보내 주셔서 감사합니다. 내 편집 된 게시물을 참조하십시오. 셀에 데이터를 적용하는 setDiv 메서드의 코드를 추가했습니다. – djsmit

+0

@djsmit 라벨이'issueName','issueType','issueCurrency','issueKoers','exDividendDate' 또는'exPaymentDate' 중 하나에 "덮어 쓰여지고 있습니까?"그렇지 않은 경우 셀을 요청할 때마다 설정해야합니다. – greymouser

+0

정확히 무엇을 의미하는지 모르겠습니다. 아래로 스크롤하면 일부 행이 이미 복제됩니다. 위로 스크롤하면 모든 셀이 복제됩니다. 스크린 샷에 대한 링크를 확인하십시오. 재사용 된 셀의 값을 재설정하는 방법에 대한 예가 있습니까? – djsmit

관련 문제