2013-02-28 2 views
4

J'essaie de créer un UITableViewCell personnalisé. A partir du générateur d'interface XCode 4.6, j'ai défini la propriété Style de la cellule sur Personnalisé. Et ajouté des contrôles à la cellule en utilisant le glisser-déposer. 2 UILables et un UIButton. Ça ressemble à ça.Création d'un UITableViewCell personnalisé

enter image description here

J'ai créé une classe distincte provenant de UITableViewCell pour affecter les propriétés des 3 éléments de l'interface utilisateur et effectuez les modifications nécessaires. J'ai également défini la classe personnalisée de la cellule comme DashboardCell à partir de l'inspecteur d'identité.

DashboardCell.h

DashboardCell.m

#import "DashboardCell.h" 

@implementation DashboardCell 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     [self.numberOfOverdueMails setBackgroundColor:[UIColor colorWithRed:244/255.0f green:119/255.0f blue:125/255.0f alpha:1.0f]]; 
     [self.numberOfOverdueMails setTitle:@"lol" forState:UIControlStateNormal]; 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@end 

Dans le TableViewController, j'ai modifié la méthode suivante pour retourner ma cellule personnalisée.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    DashboardCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) { 
     cell = [[DashboardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    return cell; 
} 

Mon problème est même si le bouton personnalisé apparaît, les changements que je l'ai fait (changer la couleur de fond du bouton, changer le titre d'un UILabel) ne se présentent pas. Ce qui semble être l'erreur ici?

Répondre

4

La méthode initWithStyle:reuseIdentifier: ne sera pas appelée car vous utilisez le constructeur d'interface pour créer une cellule.

Vous pouvez définir la couleur d'arrière-plan et le titre en remplaçant la méthode awakeFromNib.

Vous pouvez également définir ces derniers dans la méthode tableView:cellForRowAtIndexPath:

2

Si vous obtenez votre cellule d'un xib ou story-board, dequeueReusableCellWithIdentifier:forIndexPath: retournera toujours cell - si un existe, il le réutilisera, sinon il en créera un à partir du template dans IB. Par conséquent, votre clause if(cell ==nil) ne sera jamais satisfaite, et en fait n'est plus nécessaire. Si vous souhaitez utiliser une méthode init, utilisez initWithCoder:

Questions connexes