2012-08-09 1 views
1

안녕하세요, 저는 IOS 개발에 익숙하지 않아서 펜촉에서 만들어진 사용자 지정 셀을 사용하는 UITableView을 만들었습니다. 아래는 내 ViewController에서 내 코드입니다. 그러나 셀을 올바르게 다시 사용하고 있다고 생각하지 않기 때문에 위아래로 3 번 스크롤하면 응용 프로그램이 다운됩니다. 나는 주변에 봤지만 코드/솔루션의 많은 구식 것 같았다. 내 코드가 도움이된다면 대단히 감사합니다!NIB를 사용하여 사용자 지정 셀 재사용

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"CustomCell"; 
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; 
    if (cell == nil) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 
     for (id currentObject in topLevelObjects){ 
      if ([currentObject isKindOfClass:[UITableViewCell class]]){ 
       cell = (CustomCell *) currentObject; 
       break; 
      } 
     } 
    } 
    cell.TITLE.text = [NSString stringWithFormat:@"\"%@\"", [TITLE objectAtIndex:indexPath.row]]; 
    cell.desc.text = [desc objectAtIndex:indexPath.row]; 
    cell.votes.text = [votes objectAtIndex:indexPath.row]; 
    return cell; 
} 

답변

3

변화 행

CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; 

identifier 필드에 대해보고 CustomCell

+0

와우는 고맙습니다. – GFlam

+0

위에서 제안한 것과 같은 코드를 사용하고 있지만 nib 파일에 셀 식별자를 설정하면 위아래로 스크롤 할 때 라벨의 컨트롤이 사라집니다. 그러나 펜촉으로 식별자를 설정하지 않으면 표보기가 매우 느리게 스크롤되지만 데이터가 올바르게 올라갑니다. 어떤 아이디어가 문제 일 수 있습니까? – Anshul

+0

첫 번째로 식별자 설정을 건너 뛰면 셀을 다시 사용하지 않기 때문에 테이블 뷰가 느리게 스크롤되며 모든 셀과 하위 뷰가 다시 만들어집니다. 귀하의 문제는 cellForRowAtIndexPath 메소드에서 셀을 올바르게 구성하지 않는다고 생각할 수 있습니다. 셀 데이터를 업데이트하는 모든 코드가 if (cell == nil) 문 외부에 있는지 확인하십시오. 식별자를 사용하면 셀이 재사용되고 if (cell == nil) 문에서 코드가 호출되지 않기 때문입니다. – Eyal

0

로 설정, IB에 CustomCell .xib 파일에

CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 

이동을 할 수 다음과 같이 tableView의 펜촉을 등록 할 수 있습니다 :

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"CustomCell"; 
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     [tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:cellIdentifier]; 
     cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    } 

    //... 

    return cell; 
}