2010-08-20 3 views
0

Ceci est la tableView, comme vous pouvez le voir, quelle cellule a deux parties, la gauche, est une vue de gauche, et la droite, est la vue de droite. La couleur rouge et verte peut s'afficher, mais le droit que je crée ne peut pas s'afficher correctement. Qu'est ce qui ne va pas avec mon code? Je vous remercie.Pourquoi le texte factice ne peut pas charger sur ma cellule?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier"; 

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleSubtitle 
       reuseIdentifier:SectionsTableIdentifier] autorelease]; 
    } 

    cell.textLabel.textColor = [UIColor whiteColor]; 
    UIView *rightUIView = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 160, cell.frame.size.height)]; 
    [rightUIView setBackgroundColor:[UIColor greenColor]]; 
    UIView *leftUIView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, cell.frame.size.height)]; 
    [leftUIView setBackgroundColor:[UIColor redColor]]; 

    UILabel *rightLabel = [[UILabel alloc] init]; 
    [rightLabel setText:@"dummy"]; 
    [rightUIView addSubview:rightLabel]; 

    [cell addSubView:leftUIView]; 
    [cell addSubView:rightUIView]; 

} 
+1

Ce code n'affiche aucun de vos objets gauche/droitUIView. S'il vous plaît poster le code que vous utilisez réellement. Il y a probablement d'autres problèmes avec ce code, mais sans le code * original *, il s'agit simplement de deviner. – Eiko

Répondre

1

Le premier problème avec votre code est que vous créez des sous-vues de cellules chaque cellule de temps est demandé - si vous faites défiler votre table çà et là votre cellulaire aura un tas de ces sous-vues - certainement ce n'est pas bon. Vous devez créer des sous-vues de cellules une seule fois - lors de la création de la cellule et après que seulement définir les valeurs appropriées pour les:

const int kRightViewTag = 100; 
const int kRightLabelTag = 200; 
... 
if (cell == nil) { 
    // Create everything here 
    cell = [[[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleSubtitle 
      reuseIdentifier:SectionsTableIdentifier] autorelease]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 

    UIView *rightUIView = [[UIView alloc] initWithFrame:CGRectMake(160, 0, 160, cell.frame.size.height)]; 
    rightUIView.tag = kRightViewTag; 
    [rightUIView setBackgroundColor:[UIColor greenColor]]; 
    [rightUIView release]; // Do not forget to release object you allocate!! 

    UIView *leftUIView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, cell.frame.size.height)]; 
    [leftUIView setBackgroundColor:[UIColor redColor]]; 
    [leftUIView release]; // Do not forget to release object you allocate!! 

    UILabel *rightLabel = [[UILabel alloc] initWithFrame:leftUIView.bounds]; 
    rightLabel.tag = kRightLabelTag; 
    [rightUIView addSubview:rightLabel]; 
    [rightLabel release]; 
} 
// Setup values here 
UILabel* rightLabel = (UILabel*)[[cell viewWithTag:kRightViewTag] viewWithTag:kRightLabelTag]; 
rightLabel.text = @"dummy"; 

La deuxième chose est que vous ne le cadre de l'étiquette définie nulle part (je l'ai fixé que ci-dessus) afin il est probable que le cadre soit de taille zéro et c'est pourquoi vous ne pouvez pas le voir.

Le troisième problème est que vous allouez des vues mais ne les libérez pas - donc elles fuient juste. N'oubliez pas que si vous créez des objets en utilisant alloc, new ou copy, vous êtes responsable de leur libération.

Questions connexes