J'ai créé un fichier personnalisé UITableViewCell
le chargeant à partir d'un fichier xib suivant les conseils utiles de; How do you load custom UITableViewCells from xib files.Retourne différents types UITableViewCell dans cellForRowAtIndexPath
Je veux seulement cette cellule personnalisée pour la première rangée dans mon UITableView
, les autres sont des étiquettes simples et le UITableViewCell
standard est très bien.
Le problème est que lorsque j'inclue la cellule personnalisée, la totalité de UITableView
n'est pas affichée et l'écran est vide à l'exception des éléments de navigation. En utilisant seulement les cellules standard, la table apparaît bien, donc c'est quelque chose à voir avec la cellule personnalisée.
Voici le code que je dois retourner les cellules;
- (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;
}
}
Le ArticleDetailCell est chargé à partir du fichier ok et les xib propriétés se régler correctement comme je peux le voir dans le débogueur. Arrêt à return cell
lorsque j'imprime l'objet de cellule personnalisé de (gdb)
Je reçois;
<ArticleDetailCell: 0x4bc22b0; baseClass = UITableViewCell; frame = (0 0; 320 367); autoresize = W+TM+BM; layer = <CALayer: 0x4bc23c0>>
Y a-t-il un problème avec le déréférencement des cellules? Je vais quand même garder la tête pour retenir les comptes et quand ils le font et ne pas augmenter.
Pourquoi l'intégralité de UITableView disparaît-elle à cause d'un problème avec une seule cellule?
EDIT: Pour votre information @BoltClock
- (void)disableTableCell:(UITableViewCell **)cell {
[*cell setAccessoryType:UITableViewCellAccessoryNone];
[*cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[[*cell textLabel] setTextColor:[UIColor lightGrayColor]];
}
Juste un quickie: dans votre déclaration si lorsque vous personnalisez vos étiquettes, vous ne devez pas jeter '' cell' à ArticleDetailCell' chaque fois que vous déclarez déjà et lsinitialisez comme 'ArticleDetailCell'. À quoi ressemblent vos méthodes 'enableTableCell:' et 'disableTableCell:'? – BoltClock
@BoltClock merci pour l'indice de refactoring, doit avoir laissé cela avant d'avoir résolu le problème en créant la cellule personnalisée comme seul un UITableViewCell –
@BoltClock a ajouté la méthode disableTableCell à la question (l'activation est presque la même mais utilise des valeurs différentes). –