2015-01-13 41 views
7

UITableViewCell adresinde, sdwebimage ile indirilen bir resmi ayarlıyorum. Sırasıyla, UITableView'un yanlış görüntülerin görüntülenmesini engellemek için, görüntüyü prepareForReuse'da nil olarak ayarlamanız gerekir. Bununla birlikte, bunu uygulamakta güçlük çekiyorum. Görüntüyü ayarlamak burasıdır"prepareForReuse" öğesini nasıl uygularım?

: Ben - (void)prepareForSegue Xcode uygulamak

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString * reuseIdentifier = @"programmaticCell"; 
    MGSwipeTableCell * cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
    if (!cell) { 
     cell = [[MGSwipeTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; 
    } 

    CGFloat brightness = [UIScreen mainScreen].brightness; 

    cell.textLabel.text = [self.streams[indexPath.row] name]; 
    cell.detailTextLabel.text = [self.streams[indexPath.row] published]; 

    NSString *imageUrl = [NSString stringWithFormat: @"%@", [self.streams[indexPath.row] photo]]; 

    NSLog(@"Image is: %@ and path is: %d", imageUrl, indexPath.row); 

    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] 
         placeholderImage:[UIImage imageNamed:@"tile-blue.png"] options:indexPath.row == 0 ? SDWebImageRefreshCached : 0]; 

    cell.delegate = self; //optional 

    return cell; 
} 

cell buna kullanılamadığını söyleyen hatalarına yol açan tutar. Bunu uygulamak için uygun yol nedir? senin MGSwipeTableCell.m bu ekleme

+1

'prepareForReuse' sizin' MGSwipeTableCell' üzerinde uygulanmaktadır. Burada, hücrenin referansı "hücre" yerine "kendini" olarak adlandırılır. –

+0

Ama ben 'self.textLabel = nil' yaparsam, 'ViewController' türünde nesne üzerinde bulunmayan 'Property' textLabel 'atar – user4334509

+1

'HazırlıkForSegue'' 'ViewController' üzerinde' prepareForReuse' uygulamasında hatalı senin MGSwipeTableCell'. '@implementation MGSwipeTableCell'inize gidin ve orada“ prepareForReuse ”öğesini yürütün. –

cevap

10

Dene:

-(void)prepareForReuse 
{ 
    [super prepareForReuse]; 

    self.textLabel.text = @""; 
    self.detailTextLabel.text = @""; 
    self.imageView.image = nil; 
} 
+7

Mike'ın muhtemelen bildiği (sadece demo kodu) yukarıdaki çözüme yorum yapın: Bir hücrenin içeriğini sıfırlamak için prepareForReuse uygulamasını kullanmayın. Sadece görünümü sıfırlamalıdır. Dokümanlardan: "Performans nedeniyle, yalnızca hücrenin, örneğin alfa, düzenleme ve seçim durumuyla ilgili olmayan niteliklerini sıfırlamanız gerekir." Ayrıca: "Tablo görünümünün tablodaki temsilcisi: Görüntüleme: cellForRowAtIndexPath: bir hücreyi yeniden kullanırken tüm içeriği her zaman sıfırlamalıdır". CellForRowAtIndexPath'taki metin gibi içeriği ayarlayın, '' 'prepareForReuse''' içinde görünümü sıfırlayın. –

+0

Bu açıklama için teşekkürler. Aslında bunu bilmiyordum. Bunu aklımda tutacağım. Genellikle, cellForRowAtIndexPath öğesinde içerik ayarlıyorum ancak bazen içeriği prepareForReuse öğesinde sıfırlar. –

+3

Çok hoş geldiniz! Uzun zaman önce bunun üzerine geldim. UITableView'dan en iyi performansı almayı denerken akılda tutmak iyi bir şey. –

İlgili konular