2012-03-30 18 views
0

Ich habe einen UINavigationController voller UITableViews und ich benutze benutzerdefinierte Zellen in einem bestimmten dieser.UITableView Cell Label duplizieren

In tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath füge ich ein UILabel mit [cell addSubview:label];

Dies funktioniert gut, aber wenn ich dann in die Detailansicht gehen, dann wieder zurück, das Etikett dupliziert. Wie kann ich das stoppen?

Danke.

+0

Bitte geben Sie den Code aus 'cellForRowAtIndexPath:'. Wie können wir Code reparieren, den wir nicht lesen können? – Sam

Antwort

3

Das Problem ist, dass Sie jedes Mal ein neues Etikett hinzufügen, wenn die Zelle wiederverwendet und erneut angezeigt wird.

Da Sie bereits eine benutzerdefinierte Zelle verwenden, besteht die einfachste Lösung darin, der Zelle eine UILabel-Eigenschaft zuzuweisen und diese zu verwenden, anstatt jedes Mal ein neues Label hinzuzufügen. Insbesondere sollten Sie nur ein neues Label hinzufügen, wenn Sie eine Zelle erstellen, anstatt eine recycelte Zelle zu erstellen. Oder Sie können nur dann eine neue UILabel hinzufügen, wenn die Eigenschaft null ist.

+0

Ich deklariere nicht jedes Mal ein neues Label, ich mache das, was Sie sagen, und habe eine Eigenschaft für das Label in meiner benutzerdefinierten Zellenklasse. –

+0

Warum fügen Sie es dann jedes Mal als Unteransicht hinzu? – yuji

+0

Wenn ich es nicht als Unteransicht hinzufüge, wird es nicht angezeigt. Ich habe es erklärt und ihm eine Eigenschaft in meiner benutzerdefinierten Klasse gegeben, weshalb ich teilweise unsicher bin, was los ist. –

0

einen Tag des Etikett hinzufügen, dann prüfen, ob es

UILabel *label;  
if ([cell viewWithTag:2]){ 
    label = [cell viewWithTag:2];} 
else{ 
    label = [[UILabel alloc]init];label.tag = 2;} 
1

Oder als Alternative existiert das Label in der benutzerdefinierten Klasse hinzugefügt, so stellen Sie sicher, dass das Etikett innerhalb der bedingten Zelle Schöpfung hinzuzufügen. z.B.

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:ident]; 

if(cell == nil){ 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease]; 
    [cell.contentView addSubview:[[[UILabel alloc] init] autorelease]]; // <------- 
}