2011-09-24 2 views
0

별도의 클래스를 사용하여 사용자 지정 UITableViewCells를 성공적으로 사용한 적이 있지만 더 쉬운 방법이 있다고 생각하므로 계속 사용해 보았습니다. 테이블이 만들어 지지만 셀이 비어 있습니다 (아마 내 맞춤 셀이 올바르게 표시되지 않습니다). 어떤 아이디어라도 감사합니다.TableViewCell에 고유 한 클래스가 있어야합니까?

내 파일은 다음과 같습니다

@interface RemediesPopUp : UIViewController <UITableViewDataSource, UITableViewDelegate>{ 

    UITableView *remediesDataTable; 
    UITableViewCell *remediesTableCell; // ** custom cell declared here ** 

    NSArray *remediesArray; 

} 

테이블 컨트롤은 다음과 같습니다 내가 XIB 파일 창 (내가보기를 별도의 사용자 정의 셀 표시에 사용자 정의 셀 객체를 끌고

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

    static NSString *CellIdentifier = @"Cell"; 

    remediesTableCell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (remediesTableCell == nil) { 
     remediesTableCell = [[[UITableViewCell alloc] init] autorelease]; 
    } 

    // Configure the cell. 

    return remediesTableCell; 

} 

). 사용자 지정 셀을 파일 관리자에 연결했습니다. 테스트하기 위해 맞춤형 셀에 몇 개의 (정적 인) 레이블을 붙여 넣어로드 여부를 확인할 수있었습니다.

페이지와 테이블은 잘로드되지만 셀은 비어 있습니다 (흰색).

아이디어가 있으십니까?

답변

1

먼저 사용자 정의 셀이 사용자 정의 서브 클래스 (서브 클래스 UITableViewCell)이고 고유 한 nib 파일 (예 : 테이블 뷰 컨트롤러와 통합되지 않음)을 가지고 있는지 확인하십시오.

펜촉에서 인스펙터 속성을 선택하고 셀의 클래스가 CustomCell (또는 무엇이든간에)인지 확인하십시오. 또한 속성 관리자에서 Identifier을 "CustomCellIdentifier"또는 이와 비슷한 것으로 설정해야합니다. 테이블 뷰 데이터 소스에서

, 당신의 tableView:cellForRowAtIndexPath 방법이 유사한 코드를 포함한다 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; // Same as you set in your nib 

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

     for (id oneCell in nib) { 
      if ([oneObject isKindOfClass:[CustomCell class]]) { 
       cell = (CustomCell *)oneCell; 
      } 
     } 
    } 

    // Customise the labels etc... 

    return cell; 
} 

이 시각적으로 어떤 뷰를 배치하는 사용자 정의 셀을 수 있도록, 자신의 펜촉에서 직접로드되는 것을 보장한다 또는 레이블. 적절한 셀이 대기열에서 풀리거나 생성 된 후에는이 레이블의 텍스트를 설정할 수 있습니다.

코드에서 '사용자 정의'셀은 보통 UITableViewCell입니다. 인터페이스 빌더를 사용하여 셀을 사용자 정의하려면이 클래스의 고유 한 사용자 정의 서브 클래스를 작성해야합니다.

만 펜촉 (및 하지 사용자 정의 서브 클래스)를 사용하는 사용자 지정 셀 편집

는, 즉 UITableViewCellCustomCell을 변경, 일반 UITableViewCell에 셀을 캐스팅 위의 코드 예제를 변경 . Interface Builder에서 각 셀의 사용자 정의보기 (라벨 등)에 고유 한 태그를 지정하십시오.

#define MyLabelTag 10 // These should match the tags 
#define MyViewTag 11 // assigned in Interface Builder. 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; // Same as you set in your nib 

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; 

    for (id oneCell in nib) { 
     if ([oneObject isKindOfClass:[UITableViewCell class]]) { 
      cell = (UITableViewCell *)oneCell; 
     } 
    } 
} 

    // Get references to the views/labels from the tags. 
    UILabel *myLabel = (UILabel *)[cell viewWithTag:MyLabelTag]; 
    UIView *myView = (UIView *)[cell viewWithTag:MyViewTag]; 

    // Customise the views/labels... 
    // ... 

    return cell; 
} 
+0

+1 셀을 사용자 지정 하위 클래스로 만들 필요는 없습니다.xib에는 원하는 하위보기가 포함될 수 있으며 태그를 통해 하위보기를 참조 할 수 있습니다. – jrturton

+0

@jrturton : 사실, 개인적으로 IB에서 할당 된 임의의 태그가 아닌 콘센트를 통해 맞춤형 셀 레이블을 참조 할 수 있다면 개인적으로 조금 더 명확해질 것이라고 생각합니다. 아마도 개인적인 선호도. – Stuart

+0

감사합니다. 나는 jrturton의 생각이 내가 생각하고있는 선을 따라 더 있다고 생각한다. 나는 커스텀 서브 클래스가 필요 없다고 생각한다. 어떤 사람이 제안 된 코드로 생각을 확장 할 수 있습니까? 고마워. – Jeremy

0

내가 일반적으로하는 일은 UIView를 UITableViewCell에 넣고 UIView에 모든 레이블과 기타 UI 물건을 넣는 것입니다. 이것이 작동하지 않으면 알려주십시오. 나는 다른 해결책을 가지고 있을지도 모른다.

+0

안녕 Mohabitar : 장소에두고

코드는 다음과 같이 보일 것입니다. 위의 의견을 참조하십시오. 하위 클래스를 사용하지 않으려 고하지만 사용자 정의 셀에서 객체를 참조하는 방법을 잘 모르겠습니다. 코드를 제안했다면 많은 도움이 될 것입니다. 감사. – Jeremy

관련 문제