2010-12-06 13 views
0

Je souhaite avoir deux données sur chaque ligne de ma tableview. Quelque chose comme appel récent (à gauche le nom, à droite le jour)UITableview avec deux données par ligne

voici mon code:

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

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
    //cell.selectionStyle = UITableViewCellStyleValue1 ; 
} 

// Configure the cell. 

NSDictionary *dictionary = [listaOggetti objectAtIndex:indexPath.section]; 
NSArray *array = [dictionary objectForKey:@"Elementi"]; 
NSString *cellValue = [array objectAtIndex:indexPath.row]; 
NSArray *array1 = [dictionary objectForKey:@"Tipo"]; 
NSString *cellDetail = [array1 objectAtIndex:indexPath.row]; 

if ([indexPath row] == 0){ 
    cell.textLabel.text = cellValue; 
    cell.textAlignment = UITextAlignmentCenter; 
    cell.backgroundColor = [UIColor blueColor]; 
    cell.font = [UIFont systemFontOfSize:13]; 
} else { 

cell.textLabel.text = cellDetail; 
cell.detailTextLabel.text = cellValue; 
} 

return cell; 
} 

j'ai essaye d'utiliser un style différent sur

initWithStyle 

sans aucun résultat (seulement montrer mon detailtext sur la droite). Dans NSLOG, je vois la bonne valeur de cellDetail.

{ 
    Elementi =   (
     "Chiamate e Videochiamate Nazionali", 
     "08m:43s", 
     "1h:31m:17s", 
     "1h:40m:00s" 
    ); 
}, 
    { 
    Tipo =   (
     Effettuato, 
     Rimanente, 
     Totale 
    ); 
}, 
    { 
    Elementi =   (
     "SMS e MMS Nazionali", 
     21, 
     29, 
     50 
    ); 
}, 
    { 
    Tipo =   (
     Effettuato, 
     Rimanente, 
     Totale 
    ); 
}, 
    { 
    Elementi =   (
     "Traffico Dati FMM", 
     "69.95 MB", 
     "954.05 MB", 
     "1024.00 MB" 
    ); 
}, 
    { 
    Tipo =   (
     Effettuato, 
     Rimanente, 
     Totale 
    ); 
}, 
    { 
    Elementi =   (
     Skype, 
     "00m:00s", 
     "3h:20m:00s", 
     "3h:20m:00s" 
    ); 
}, 
    { 
    Tipo =   (
     Effettuato, 
     Rimanente, 
     Totale 
    ); 
}, 
    { 
    Elementi =   (
     "WWW3, Yahoo!, Google, eBay e altri servizi", 
     "0.00 MB", 
     "100.00 MB", 
     "100.00 MB" 
    ); 
}, 
    { 
    Tipo =   (
     Effettuato, 
     Rimanente, 
     Totale 
    ); 
} 
) 

mon but est d'obtenir des cellules comme ceci:

alt text

Répondre

1

Je considérerais creating a custom Cell, c'est facile à faire et il regarde vraiment le billet s'il est bien fait. Sinon, votre code semble correct, vérifiez que vos étiquettes ont été allouées (pas nul). Sur une note de côté, combien d'éléments avez-vous dans votre jeu de données? Je demande seulement parce que si c'est seulement 1, vous ne définissez jamais detailTextLabel.

+0

il initialise la cellule incorrectement ... regarder de plus près –

+2

Complètement inutile: initialiser la cellule correctement, et utiliser 'UITableViewCellStyleValue1'. –

+0

Merci Jonathan, mon code est correct, j'ai trouvé mon erreur en créant mon deuxième tableau, maintenant l'application fonctionne très bien! – zebra

1

Je crois que vous devez initialiser la cellule comme celui-ci, vous utilisez le style incorrect lors de l'initialisation de la cellule

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  
          reuseIdentifier:CellIdentifier] autorelease]; 
+0

'dequeueReusableCellWithIdentifier' renvoie un pointeur sur une cellule réutilisable ou nul, et il vérifie pour nul après et allocs le cas échéant –

+0

@Luke McNeice je crois qu'il utilise le mauvais style lors de l'initialisation de la cellule –

+0

ok, merci pour la correction –

0

Merci à tous, mon code est correct, la faute est sur le second tableau. résolus de cette façon:

NSDictionary *dictionary1 = [listaDettaglioOggetti objectAtIndex:indexPath.section]; 
NSArray *array1 = [dictionary1 objectForKey:@"Tipo"]; 
NSString *cellDetail = [array1 objectAtIndex:indexPath.row]; 

La dernière question:

je modifier la première ligne de chaque section (modifier la taille de police, couleur, Aligement). J'ai pense que quelque chose comme ceci:

NSInteger sectionRows = [tableView numberOfRowsInSection:[indexPath section]]; 
    if (sectionRows == 0){ 
    cell.textLabel.text = cellDetail; 
    cell.detailTextLabel.textAlignment = UITextAlignmentCenter; 
    cell.detailTextLabel.backgroundColor = [UIColor blueColor]; 
    cell.detailTextLabel.font = [UIFont systemFontOfSize:13]; 
    } else { 
cell.textLabel.text = cellDetail; 
cell.detailTextLabel.text = cellValue; 
} 

mais cela ne fait pas la magie: D S'il vous plaît laissez-moi savoir s'il est préférable d'ouvrir un autre sujet ou nous pouvons continuer ici.

+0

nouvelle question serait mieux –