2009-03-10 7 views
2

私はUITableViewCellを拡張するクラスを持っています。この練習の目的で、それを "CustomCell"と呼ぶことにしましょう。 CustomCellでは、UIImageView IBOutletのセットアップがあります。この場合のイメージインスタンス名はmyImageです。サーバーから戻ってくる特定の基準に基づいてこのイメージを表示したいと考えています。そのデータは、この練習では "serverData"と呼ばれる辞書です。最初は、UITableViewは、UIImageViewをセル内に表示するだけで、うまく描画できます。この問題は、実際のUITableViewのスクロールを開始すると発生し、イメージが失われます。どういうわけか、キャッシュされているかデキューされていません。問題がどこにあるか、このコードでどのように改善するかは不明です。以下はその抜粋です:UITableViewCellテーブルが表示外にスクロールするときの変な動作

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; 
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier]; 
    if (cell == nil) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
                owner:self options:nil]; 

     cell = (CustomCell *)[nib objectAtIndex:0]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    }  

     NSDictionary *serverData = myData // previously defined. 
     if ([[serverData valueForKey:@"foo"] isEqualToString:@"0"]) 
      cell.myImage.hidden = YES; 
     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
     return cell; 
}  
+0

は、画像が失われたとなっていことを使用するたび.myImage.hidden(それが消えるなど)や、細胞は完全にオフスクリーンにスクロールして、背中にスクロールされたとき? –

答えて

5

(例えばdequeueReusableCellWithIdentifier)コールをスクロールしたときのUITableViewは、セルを再利用したメモリ上の理由から。

これは、受信したセルが、その識別子とともに使用するために有効であると設定できるため、これらのプロパティをすべてリセットする必要があることを意味します。

私はあなたが、これはそれを修正しますので、隠されていた画像を細胞に与えられている疑いがあなたの場合は

NSDictionary *serverData = myData // previously defined. 
    if ([[serverData valueForKey:@"foo"] isEqualToString:@"0"]) 
    cell.myImage.hidden = YES; 
    else 
    cell.myImage.hidden = NO; 
3

はあなたの細胞が再利用されていることを忘れないでください、あなたはセルをリセットする必要があります値は、あなたがスクロールしたとき、細胞

if (cell == nil) { 
      NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
                            owner:self options:nil]; 

      cell = (CustomCell *)[nib objectAtIndex:0]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } else { 
      cell.myImage.hidden = NO; 
    } 
関連する問題