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