2013-02-13 1 views
0

UITableView를 사용하여 iPad 앱용 레이아웃과 같은 그리드 (스프레드 시트)를 만들고 있습니다. 그리드 파트가 작동하지만, 동적으로 UILabels을 셀에 추가하기 때문에 재사용 가능한 부분이 잘 작동하지 않습니다.UITableView GridLayout 재사용 가능한 UITableViewCell의 문제

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FundCell"]; 

    Fund *fund = [funds objectAtIndex:[indexPath row]]; 

    float labelWidth = 1024/([columnNames count] -1); 

    for(NSString *columnName in columnNames) 
    { 
     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, 0, labelWidth, 44)]; 

     label.backgroundColor = [UIColor clearColor]; 

     label.text = [fund valueForKey:columnName]; 

     x += label.bounds.size.width; 

     [cell addSubview:label]; 
    } 

    x = 0; 

    return cell; 
} 

결과 :

enter image description here

+0

'UITableView' 인스턴스를 여러 개 생성하는 대신'UICollectionView'를 사용하지 마십시오. –

+0

여러 개의 UITableView 인스턴스를 생성하지 않습니다 !!! – azamsharp

+0

죄송합니다. 내가 틀 렸습니다 –

답변

1

당신은 모든 재사용에 새 레이블을 추가하고 여기에 코드입니다. 레이블을 한 번만 추가하고 레이블을 일반적으로 사용자 정의 셀 하위 클래스의 속성으로 저장 한 다음 텍스트 값을 설정하십시오.

xib에서 사용자 정의 셀을 정의하고 레이블을 배치하여 콘센트를 만드는 것이 더 쉽습니다. 이것을 테이블에 재사용 할 수 있도록 등록 할 수 있습니다. 필요에 따라 셀을 만들거나 큐에서 제거합니다.

+0

사실입니다! 하지만 동적으로 uilabel을 생성하므로 다른 뷰 컨트롤러에서 재사용 할 수 있으며 인터페이스 빌더 및 콘센트에 의존하지 않습니다. 그러나 나는 그 기회를 줄 것이다! 그게 가장 쉬울거야! – azamsharp

+0

자신 만의 펜촉으로 정의 된 셀은 원하는 곳 어디에서나 재사용 할 수 있습니다. – jrturton

+0

감사! 서로 다른 열이있는 컬렉션이 서로 다른 경우 5 개의 다른 nib/사용자 정의 셀을 만들어야합니다. – azamsharp

관련 문제