2011-11-23 66 views
2

我想用UITableView創建應用程序的博客部分。該表應該有兩個部分和一個分組樣式。第一部分是博客和表格的第二部分,評論。博客可以是任何大小。當輸入大量的文字時,我的意思是10K字以上,帶有鏈接或/和照片,應用程序崩潰或根本不顯示文字。評論還可以包含大量文字以及鏈接和照片。看起來UITableView有其侷限性。這是我所面臨的問題:帶有非常長文本的UITableViewCell

  1. 內存
  2. 並不總是顯示所有文本(如果它太長)
  3. 滾動滯後

關於如何做到這一點的任何想法?我是否應該嘗試用UITextViews創建一張我自己的表格來模仿UITableView的行爲?有沒有簡單的方法來實現它與蘋果的UITableView?我還沒有看到有這樣的應用程序。任何可以幫助我開始的代碼?我還必須使用NSAttributedString進行文本格式設置。

UPDATE: 閱讀tableView:heightForRowAtIndexPath:的文檔中發現,回答了這樣的問題,但不是我的問題的重要注意事項。

重要提示:由於底層的實現細節,你不應該返回值大於2009年

回答

0

確保你是reusing cellscellForRowAtIndexPath:數據源方法內。這應該確保滾動不會滯後。如果它繼續滯後,請確保在繪製單元格時不會阻塞主線程。此外,您可以使用UILabel中的屬性adjustsFontSizeToFitWidthlineBreakMode來控制在任何給定時間出現的文本數量。

請確保您自動釋放您在cellForRowAtIndexPath:中的所有單元alloc

1

您需要根據您的文本動態調整表格視圖單元格高度。之後,您需要創建一個具有動態高度的標籤,該高度取決於文本並在單元格中添加該標籤。

對於內存管理,您需要確保您的單元格是自動釋放的,並且您在單元格中添加的子視圖也會獲得relaese。

下面是一些代碼,可以幫助您顯示整個文本,而無需滾動頭​​痛。

假設blogArray是包含要在單元格中顯示的文本的數組(替換爲您自己的)。

- (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