2013-10-22 67 views
2

我知道,這被問了好幾次,它每次都有一次以上的答案,但這些解決方案中沒有一個能幫助我!TableView在滾動時更改單元格內容

當我的TableView打開時,我可以看到一行文本,而不是> 10!所以我向下滾動,然後2個單元格呈現正確的方式!如果我再次向上滾動,我可以用這一行看到單元格,它也展示了一切。 所以,這裏是我的問題:我的代碼出了什麼問題?

這是我的cellForRowAtIndexPath:

NSString *CellIdentifier = @"Cell"; 
    AACTickerYellowCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(cell == nil) 
    { 
     cell = [[AACTickerYellowCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSString * text = [self getTextAtIndex:indexPath]; 

    CGSize size = [self frameForText:text sizeWithFont:nil constrainedToSize:CGSizeMake(260.0f, CGFLOAT_MAX)]; 

    [cell.textView setFrame:CGRectMake(10, 5, 260, size.height + 20)]; 
    cell.textView.text = text; 

    return cell; 
+0

請張貼的tableView:numberOfRowsInSection: – danh

+0

請解釋getTextAtIndex:也一樣,加載數據可能需要更長的時間比花費的時間來加載細胞。 – faterpig

+0

@MyJBMe你有沒有試過我的代碼? –

回答

1

嘗試這樣的,你的問題消失:

NSString *CellIdentifier = @"Cell"; 
    AACTickerYellowCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if(cell == nil) 
    { 
     cell = [[AACTickerYellowCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    NSString * text = [self getTextAtIndex:indexPath]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     CGSize size = [self frameForText:text sizeWithFont:nil constrainedToSize:CGSizeMake(260.0f, CGFLOAT_MAX)]; 

     [cell.textView setFrame:CGRectMake(10, 5, 260, size.height + 20)]; 
     cell.textView.text = text; 
    }); 
    return cell; 
+0

真棒,它的作品!謝謝! :) 但是,你可以向我解釋,dispatch-block的作用是什麼? – MyJBMe

+0

問題在於,當您更改標籤的UI時,第一個單元格已經生成,因此您必須使用此更改進行阻止,並將其推送到主隊列(即用於UI的隊列)中,以便執行此操作異步時間 –

0

也許你錯過了

NSString * text = [self getTextAtIndex:indexPath.row]

相關問題