2010-12-17 13 views
0

Das scheint so, als sollte es wirklich einfach sein, aber ich kann es nicht zum Laufen bringen. Ich habe viele ähnliche Beiträge gesehen und die Lösungen ausprobiert, aber keine von ihnen hat für mich funktioniert.UILabel-Text in bestehender Zelle kann nicht aktualisiert werden

Im Grunde versuche ich den Text eines Etiketts in einer Zelle zu aktualisieren. Es funktioniert das erste Mal, wenn ich die Zelle erstelle, funktioniert aber später nicht, wenn ich die Zelle von dequeueReusableCellWithIdentifier bekomme. Übrigens benutze ich eigentlich eine DTGridView, die etwas ähnlich zu einer UITableView ist. Hier ist der relevante Code aus meiner Sicht Controller:

- (DTGridViewCell *)gridView:(DTGridView *)gv viewForRow:(NSInteger)rowIndex column:(NSInteger)columnIndex { 

    EntityViewCell *cell = [self entityViewCellForGridView:gv]; 

    // Find the single dimension index of the cell 
    NSUInteger index = [self indexOfGridView:gv row:rowIndex column:columnIndex]; 

    [self configureCell:cell atIndex:index]; 

    return cell; 
} 

- (EntityViewCell *)entityViewCellForGridView:(DTGridView *)gv { 
    NSString *CellIdentifier = @"EntityViewCell"; 

    EntityViewCell *cell = (EntityViewCell *)[gv dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (!cell) { 
     cell = (EntityViewCell *)[EntityViewCell loadCellWithReuseIdentifier:CellIdentifier]; 
    } 
    return cell; 
} 

- (void)configureCell:(EntityViewCell *)cell atIndex:(NSInteger)index { 
    NSString *name = [[self.data objectAtIndex:index] valueForKey:@"name"]; 
    if (!name) { 
     name = @""; 
    } 
    cell.title = name; 

    // Change the title of the cell if it is selected 
    if ([self.selectedCells objectForKey:[NSNumber numberWithInt:index]] != nil) { 
     cell.title = @"SELECTED"; 
    } 
}

Und hier ist der entsprechende Code aus der EntityViewCell Klasse:

- (void) setTitle: (NSString *) aTitle { 
    if (!label) { 
     label = [[UILabel alloc] initWithFrame: CGRectZero]; 
    } 
    label.text = aTitle; 
    [self setNeedsLayout]; 
}

Die Titel der Zelle richtig auf den Wert in meinem data Array gesetzt ist, aber Nach dem Auswählen einer Zelle ändert sich der Wert nie in SELECTED. Ich habe durch Debugging überprüft, dass setTitle aufgerufen wird mit aTitle auf SELECTED gesetzt, wenn eine Zelle berührt wurde, so dass ich nicht sicher bin, warum die Ansicht dies nicht zeigt.

Danke!

Antwort

0

Ich konnte dies lösen, indem Sie [self setNeedsDisplay] an das Ende der DTDataGridreloadData Funktion hinzufügen. Ich bin mir nicht sicher, warum dies benötigt wird (und das Hinzufügen zu meiner Zelle setTitle funktioniert nicht).

Ich bin ein wenig besorgt über die Effizienz hier, aber ich kenne keine bessere Möglichkeit, damit umzugehen (Ich bin ziemlich neu in iOS). Jetzt rufe ich reloadData jedes Mal an, wenn eine Zelle ausgewählt wird, und seit ich setNeedsDisplay zu der DTDataGrid hinzugefügt habe, zeichnet es das gesamte Datengrid jedes Mal neu. Es muss einen besseren Weg geben ... irgendwelche Ideen?

0

Im oberen Code ändern Sie den Eigenschaftentitel und im unteren Code ändern Sie den Eigenschaftentext. Könnte das das Problem sein?

+0

Nun, ich habe die 'setTitle' -Eigenschaft implementiert, um die' text' -Eigenschaft des Labels zu ändern, also glaube ich nicht, dass das ein Problem ist. Aus Gründen der Vollständigkeit habe ich den Code meines View-Controllers geändert, um die Eigenschaft 'text' des Labels mit demselben Ergebnis direkt zu ändern. – Eric

Verwandte Themen