2011-11-23 4 views
2

UITableView을 사용하여 앱의 블로그 파트를 만들고 싶습니다. 표에는 두 개의 섹션과 그룹화 된 스타일이 있어야합니다. 첫 번째 섹션은 블로그이며 두 번째 섹션은 댓글입니다. 블로그는 모든 크기가 될 수 있습니다. 많은 양의 텍스트를 입력 할 때 링크 또는/및 사진이 포함 된 10K 단어 이상을 의미하는 경우 앱이 다운되거나 텍스트가 전혀 표시되지 않습니다. 댓글에는 링크와 사진뿐만 아니라 많은 양의 텍스트가있을 수 있습니다. UITableView에는 한계가있는 것으로 보입니다.정말 긴 텍스트가있는 UITableViewCell

  1. 메모리 (너무 긴 경우)
  2. 항상
  3. 스크롤이 작업을 수행하는 방법에 대한

어떤 아이디어를 지연 모든 텍스트를 표시하지 않습니다 : 이러한 문제 내가 직면하고 있습니다 ? 의 동작을 모방하려고 시도 할 때 내 UITextViews이라는 테이블을 만들어야하나요? Apple의 UITableView으로 쉽게 구현할 수 있습니까? 나는이 일을하는 앱을 보지 못했다. 시작하는 데 도움이되는 코드는 무엇입니까? 텍스트 서식 지정에도 NSAttributedString을 사용해야합니다.

UPDATE : tableView:heightForRowAtIndexPath:에 대한 문서를 읽기는 내 문제를 질문에 대한 대답하지만 중요한 메모를 발견했다. 중요

: 이상 2009 년

답변

0

인해 기본이되는 구현의 세부 사항에, 당신은 반환하지 않아야 값은 당신이 당신의 cellForRowAtIndexPath: 데이터 소스 방식 내부 reusing cells을 있는지 확인하십시오. 스크롤링이 지연되지 않도록해야합니다. 래그가 계속되면 셀을 그릴 때 주 스레드를 차단하고 있지 않은지 확인하십시오. 또한 UILabel에서 adjustsFontSizeToFitWidthlineBreakMode과 같은 속성을 사용하여 주어진 시간에 나타나는 텍스트의 양을 제어 할 수 있습니다.

alloccellForRowAtIndexPath:의 셀도 자동으로 가져 오도록하십시오.

1

동적으로 텍스트에 따라 테이블보기 셀 높이를 조정해야합니다. 텍스트에 따라 동적 높이가있는 레이블을 만들고 셀에 레이블을 추가해야합니다.

메모리 관리를 위해 셀을 자동으로 해제하고 셀에 추가하는 하위보기도 relaese로 설정해야합니다.

다음은 스크롤하는 두통없이 전체 텍스트를 표시하는 데 도움이되는 몇 가지 코드입니다.

블로그 배열이 셀에 표시 할 텍스트가 포함 된 배열이라고 가정합니다 (사용자 코드로 바꾸기).

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     if([self.blogArray count]>0) 
    { 
    CGSize labelsize; 
    UILabel *blogTextLabel = [[UILabel alloc] init];; 
    [blogTextLabel setNumberOfLines:0]; 
    [blogTextLabel setBackgroundColor:[UIColor clearColor]]; 
    NSString *text=[self.blogArray objectAtIndex:indexPath.row]; 
    [blogTextLabel setFont:[UIFont fontWithName:@"Helvetica"size:14]]; 
    labelsize=[text sizeWithFont: blogTextLabel.font constrainedToSize:CGSizeMake(268, 2000.0) lineBreakMode:UILineBreakModeWordWrap]; 
    blogTextLabel.frame=CGRectMake(10, 24, 268, labelsize.height); 
    blogTextLabel.text=text; 
    [cell.contentView addSubview: blogTextLabel]; 
    [blogTextLabel release]; 


    } 
    else { 
    } 

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 

    return cell; 
} 

은 또한 테이블 뷰 셀 높이를 조정해야합니다 : -

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    CGSize labelsize; 
    UILabel * textDesc1 = [[UILabel alloc] init]; 
    [textDesc1 setNumberOfLines:0]; 
    textDesc1.text=[self.blogArray objectAtIndex:indexPath.row]; 
    [textDesc1 setFont:[UIFont fontWithName:@"Helvetica" size:14.0]]; 
    labelsize=[textDesc1.text sizeWithFont:textDesc1.font constrainedToSize:CGSizeMake(268, 2000.0) lineBreakMode:UILineBreakModeWordWrap]; 
    labelsize.height=labelsize.height+35; 
    [textDesc1 release]; 
    return (CGFloat)labelsize.height; 


} 
+0

난 당신이 장치에서 테스트하는 코드를 넣어 생각하지 않습니다. 먼저 contentview의 이미 존재하는 레이블에 여분의 레이블을 추가함으로써 메모리에 도움이되지 않습니다. 두세 개의 셀에서 10,000 단어 이상을 사용 해보았습니까? 어떻게 테이블이 작동하는지, 동적으로 크기를 재조정하는 방법, 문자열에 속성을 할당하는 방법 등을 알고 있습니다.그러나 스크롤을 부드럽고 응용 프로그램을 손상시키지 않고 가장 중요하게하기 위해 모든 것을 함께 섞어서는 안됩니다. 해결책이 있다면 다시 시도해주세요. 감사 – GianPac

관련 문제