2011-10-21 22 views

cevap

18

Aksine Dizin yolunu yakalamanız gerekir hücreyi yakalayan daha sonra kullanarak geri hücreyi almak:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

Bu şekilde, hücre geri nil alırsınız ekran ve görüntünün kapalı şimdi ise Yanlış hücre üzerinde ayarlanmayacak.

dispatch_async()'inizden sonra eklemeniz gereken bir şey de cell.imageView.image=somePlaceholderImage.

Örn .:

if (![[NSFileManager defaultManager] fileExistsAtPath:[path stringByAppendingPathComponent:@"image.png"]]) 
{ 
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
    dispatch_async(queue, ^{ 
     NSString *url=[pat stringByAppendingPathComponent:@"comments.txt"]; 
     NSString *u=[NSString stringWithContentsOfFile:url encoding:NSUTF8StringEncoding error:nil]; 
     NSURL *imageURL=[NSURL URLWithString:u]; 
     NSData *image=[NSData dataWithContentsOfURL:imageURL]; 
     [image writeToFile:[pat stringByAppendingPathComponent:@"image.png"] atomically:YES]; 
     dispatch_sync(dispatch_get_main_queue(), ^{ 
      UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
      cell.imageView.image=[UIImage imageWithContentsOfFile:[pat stringByAppendingPathComponent:@"image.png"]]; 
      [cell setNeedsLayout]; 
      NSLog(@"Download"); 
     }); 
    }); 
    cell.imageView.image=[UIImage imageNamed:@"placeholder"]; 
} 
else 
{ 
    NSLog(@"cache"); 
    cell.imageView.image=[UIImage imageWithContentsOfFile:[pat stringByAppendingPathComponent:@"image.png"]]; 
} 
+0

Cevabınız için teşekkürler ... ama, lütfen bir örnek kod verebilir misiniz? – blackhawk4152

+0

Cevabımı – hypercrypt

+0

teşekkürler, dostum! ne istedim – blackhawk4152

2

Hücreleri yeniden kullanıyorum - (void)tableView:(UITableView *)aTableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { Görüntüyü temizlemeniz veya döndürücünüze sıfırlamanız gerekiyor. Tablo görünümü satırları yeniden kullanıldığından, göreceğiniz davranış budur.

2

tanımlamak UITableViewCell yapmaz - bu amaçla (boşluk) prepareForReuse? Geçersiz kılın ve resminizi temizleyinBurada görün.

+0

[belgeler] 'e göre (http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableViewCell/prepareForReuse) hazırladığınız içeriğe joinForReuse içinde değmemelisiniz. İçeriği bunun yerine cellForRowAtIndexPath olarak sıfırlamanız gerekir. –

İlgili konular