2009-03-10 8 views
2

Ich habe eine Klasse, die UITableViewCell erweitert. Zum Zweck dieser Übung nennen wir es "CustomCell". In CustomCell habe ich ein UImageView IBOutlet-Setup. Der Bildinstanzname ist in diesem Fall myImage. Ich möchte dieses Bild basierend auf bestimmten Kriterien anzeigen, die von einem Server zurückkommen. Diese Daten sind ein Wörterbuch, das wir in dieser Übung "serverData" nennen. Zuerst macht das UITableView recht gut mit der UIImageView, die in Zellen angezeigt wird, die es sollte. Das Problem tritt auf, wenn ich scrolle das tatsächliche UITableView, das Bild verloren geht. Irgendwie wird es nicht richtig zwischengespeichert oder aus der Warteschlange genommen. Ich bin mir nicht sicher, wo das Problem liegt oder wie ich diesen Code verbessern kann. Hier ein Auszug:UITableViewCell seltsames Verhalten, wenn die Tabelle scrollt aus der Sicht

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

das Bild verloren gehen Sind beim Scrollen (zB es verschwindet), oder wenn die Zelle aus dem Bildschirm vollständig gescrollt und dann zurück auf gescrollt? –

Antwort

5

Aus Speichergründen UITableView Zellen wieder verwendet beim Scrollen (z.B. den dequeueReusableCellWithIdentifier) ​​-Aufruf.

Was dies bedeutet, ist, dass die Zelle, die Sie in irgendeiner Weise konfiguriert wurde, erhalten könnte, die für die Verwendung mit dieser Kennung gültig ist, so dass Sie alle diese Eigenschaften zurückgesetzt müssen.

In Ihrem Fall vermute ich Sie mit einem Bild einer Zelle gegeben werden, die versteckt worden war, so dass dies das Problem beheben wird:

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

Denken Sie daran, dass Ihre Zellen wieder verwendet werden, so dass Sie die Zelle zurücksetzen müssen .myImage.hidden Wert jedes Mal, wenn Sie diese Zelle

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; 
    }