Ich habe eine benutzerdefinierte UITableViewCell
erstellt, die es aus einer XIB-Datei nach der hilfreichen Anleitung von; How do you load custom UITableViewCells from xib files.Geben Sie verschiedene UITableViewCell-Typen in cellForRowAtIndexPath zurück
Ich möchte nur diese benutzerdefinierte Zelle für die erste Zeile in meinem UITableView
, die anderen sind einfache Etiketten und der Standard UITableViewCell
ist in Ordnung.
Das Problem ist, wenn ich die benutzerdefinierte Zelle die gesamte UITableView
wird nicht angezeigt und der Bildschirm ist leer, mit Ausnahme der Navigationselemente. Wenn Sie nur die Standardzellen verwenden, erscheint die Tabelle in Ordnung, also hat sie etwas mit der benutzerdefinierten Zelle zu tun.
Hier ist der Code, den ich die Zellen zurückgeben muss;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 0) {
ArticleDetailCell *cell = (ArticleDetailCell *)[tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%@Detail", reuseIdentifier]];
if(!cell) {
// Load the top-level objects from the custom cell XIB.
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ArticleDetailCell" owner:self options:nil];
// Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
cell = (ArticleDetailCell *)[topLevelObjects objectAtIndex:0];
}
[[(ArticleDetailCell *)cell judges] setText:[[self caseBaseArticle] judges]];
[[(ArticleDetailCell *)cell judgementDate] setText:[[self caseBaseArticle] judgmentDate]];
[[(ArticleDetailCell *)cell court] setText:[[self caseBaseArticle] court]];
return cell;
} else {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if(!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
[[cell textLabel] setNumberOfLines:1];
[[cell textLabel] setFont:[UIFont systemFontOfSize:14]];
[[cell textLabel] setText:articleRowTitles[indexPath.row-1]];
}
if ([self tableRowHasContentDetail:indexPath]) {
[self enableTableCell:&cell];
}else {
[self disableTableCell:&cell];
}
return cell;
}
}
Die ArticleDetailCell aus der xib Datei ok und die Eigenschaften erhalten geladen richtig eingestellt, wie ich dies im Debugger sehen kann. Stoppen bei return cell
, wenn ich das benutzerdefinierte Zellobjekt von (gdb)
drucke ich bekomme;
<ArticleDetailCell: 0x4bc22b0; baseClass = UITableViewCell; frame = (0 0; 320 367); autoresize = W+TM+BM; layer = <CALayer: 0x4bc23c0>>
Gibt es ein Problem mit der Zelldereferenzierung? Ich werde immer noch meinen Kopf behalten, zählt und wenn sie es tun und nicht erhöhen.
Warum verschwindet die gesamte UITableView wegen eines Problems mit einer einzelnen Zelle?
EDIT: FYI @BoltClock
- (void)disableTableCell:(UITableViewCell **)cell {
[*cell setAccessoryType:UITableViewCellAccessoryNone];
[*cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[[*cell textLabel] setTextColor:[UIColor lightGrayColor]];
}
Nur ein Quickie: in Ihre if-Anweisung, wenn Sie Ihre Etiketten anpassen, Sie müssen nicht gegossen 'cell' zu' ArticleDetailCell' jeder Zeit, weil Sie bereits deklarieren und als 'ArticleDetailCell' initialisieren. Wie sehen Ihre Methoden 'enableTableCell:' und 'disableTableCell:' aus? – BoltClock
@BoltClock danke für den Refactoring-Hinweis, muss das in, bevor ich das Problem beim Erstellen der benutzerdefinierten Zelle als nur ein UITableViewCell –
@BoltClock hinzugefügt die disableTableCell-Methode zu Frage (aktiviert ist fast das gleiche, aber andere Werte verwendet). –