2011-08-05 8 views
2

셀이 서브 클래 싱되는 테이블 뷰가 있습니다. 하위 클래스에서 UIView의 하위 클래스를 호출합니다. tableView:heightForRowAtIndexPath:을 구현했으며 하위 클래스에서이 높이를 검색하여 서브 클래 싱 된 UIView의 인스턴스 높이를 설정하려고합니다.UITableViewCell 하위 클래스의 셀 높이 가져 오기

이렇게 할 방법이 있습니까?

나는 self.bounds.size.heightself.contentView.frame.size.height을 사용해 보았지만 정확한 높이를 제공하지는 못했습니다.

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 

     textCellView = [[TextCellView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height)]; 
     [[self contentView] addSubview:textCellView]; 
    } 
    return self; 
} 

답변

8

만들 때 하위보기가 배치되지 않았으므로 프레임을 사용할 수 없습니다. 대신 사용자 정의 테이블 셀의 init 메소드에 값을 전달하십시오. initWithStyle : reuseIdentifier : 메소드를 사용해야한다는 것은 없습니다. 여기 예가 있습니다 :

- (id) initWithHeight: (CGFloat) cellHeight { 
    if ((self = [super initWithStyle: UITableViewCellStyleDefault 
        reuseIdentifier: @"MyCustomTableViewCell"])) { 
    // perform all layout that needs to happen 
    // use cellHeight in all the layout calculations 
    } 
    return self; 
} 
+0

아 물론! 나는'initWithStyle : reuseIdentifier' 메쏘드가 디폴트이고 필수적이라고 생각했다. 언제든지 테이블 뷰에서 셀을 스크롤 할 때마다 셀을 만들지 않으면 왜 내 고소가 엉망이되는지 말해 줄 수 있습니까? 즉, if (cell == nil) {// Create cell}'을 사용할 수 없다는 의미입니다. 셀이 스크롤 될 때마다 셀을 만드는 것이 너무 무거울 것이라고 나는 믿는다. 나는 애플이 그들의 예제에서'if (cell == nil)'을 사용한다고 생각한다. – simonbs

+0

세포의 높이가 서로 다르게되어 있습니까? 그렇다면 셀을 선택했을 때 셀 높이를 수동으로 다시 설정하고 레이아웃을 다시 계산해야합니다. 이 경우 init에서 설정하는 대신 height setter를 사용할 수 있습니다. 코드를 게시하십시오. –

+1

나는 나의 세포의 높이를 모른다. 나는 라벨, 간격 등의 크기로 그것을 계산합니다. 나는이 문제에 대해 새로운 질문을하는 것이 가장 좋을지도 모른다고 생각하여 가변 높이의 세포 재사용에 관한 것이었다. 셀 식별자를 변수로 지정하여 작동 시키지만, 그렇게 할 수 있는지 확실하지 않습니다. 이 게시물에 몇 가지 코드를 게시했습니다 : http://stackoverflow.com/questions/6962411/multiple-reuse-identifiers-in-a-uitableview 여기에 높이 setter를 사용하지 않지만 init에서 높이를 설정합니다. 귀하의 예에서)하지만 나는 같은 높이로 세포를 재사용 할 것입니다. – simonbs

관련 문제