2010-05-07 13 views
0

J'ai défini la taille de la tableView que je montre comme popoverController comme 4 * rowheight. Et j'utilise 12cells dans la tableView. Chaque cellule contient une image et une étiquette. Je peux voir toutes les cellules en faisant défiler. Jusqu'à la cinquième cellule c'est ok. Après la 5ème cellule, l'étiquette et l'image que j'utilise dans les quatre premières cellules sont répétées pour les cellules restantes. Et si je sélectionne la cellule, le résultat est affiché avec précision.Le contenu de la cellule change pour les lignes présentes en dehors de la hauteur de tableview (pour voir ces cellules, nous devons faire défiler vers le bas)?

Mais lorsque je reprends la tableView, l'image et les étiquettes ne sont pas précises même pour les 5 premières cellules. Tous sont modifiés mais la sélection donne le résultat correct. Quelqu'un peut-il m'aider??

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

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) 
{ 
    cell = [self tableviewCellWithReuseIdentifier:CellIdentifier rowNumber:indexPath.row]; 
} 
//tableView.backgroundColor = [UIColor clearColor]; 
return cell; 
} 


- (UITableViewCell *)tableviewCellWithReuseIdentifier:(NSString *)identifier rowNumber:(NSInteger)row 
{ 

CGRect rect; 
rect = CGRectMake(0.0, 0.0, 360.0, ROW_HEIGHT); 
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:rect reuseIdentifier:identifier] autorelease]; 

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.00, 10.00, 150.00, 100.00)]; 
myImageView.tag = IMAGE_TAG; 
[cell.contentView addSubview:myImageView]; 
[myImageView release]; 

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(170.00, -10.00, 170.00, 80.00)]; 
label.tag = LABEL_TAG; 
[label setBackgroundColor:[UIColor clearColor]]; 
[label setTextColor:[UIColor blackColor]]; 
[label setFont:[UIFont fontWithName:@"AmericanTypewriter" size:22]]; 
[label setTextAlignment:UITextAlignmentLeft]; 
[cell.contentView addSubview:label]; 
[label release]; 

if (row == 0) 
{ 
    UIImageView *imageView = (UIImageView *)[cell viewWithTag:IMAGE_TAG]; 
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"cover_v.jpg"]]; 
    UILabel *mylabel = (UILabel *)[cell viewWithTag:LABEL_TAG]; 
    mylabel.text = [NSString stringWithFormat:@"COVER PAGE"]; 
} 
    } 
+0

J'ai trouvé que lorsque je prends cette tableview, seulement 4 premières cellules sont en cours de création. Lorsque j'essaie de voir le reste en faisant défiler, il appelle le code pour la 5ème rangée. Mais pas pour les lignes restantes. Et mes lignes restantes prennent les détails de la 1ère, 2ème et 3ème cellule. – wolverine

Répondre

1

Ahh, le carcajou vous faites une erreur stupide:

Fondamentalement, vous les paramètres de la valeur de l'étiquette dans le bloc

if(cell==nil){ 
} 

. Les valeurs sont donc répétées car elles sont réutilisées et non définies pour chaque cellule.

Vous devez définir les valeurs en dehors de ce bloc à l'aide d'indexpath et la modification reflétera en conséquence.

Hope this helps,

Merci,

Madhup

+0

Je l'ai eu homme. Le plus simple, j'ai juste supprimé les deux premières lignes dans la fonction et fait la troisième ligne UITableViewCell * cell = [[UITableViewCell alloc] init]. – wolverine

0

Vous devez fournir imageView.image et Label.text pour toutes les tables:

UIImageView *imageView = (UIImageView *)[cell viewWithTag:IMAGE_TAG]; 
UILabel *mylabel = (UILabel *)[cell viewWithTag:LABEL_TAG]; 

if (row == 0) 
{ 
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"cover_v.jpg"]]; 
    mylabel.text = [NSString stringWithFormat:@"COVER PAGE"]; 
} 
else 
{ 
    imageView.image = // ??? 
    mylabel.text = // ?? 
} 

et bien sûr, ce code devrait être en dehors de l'image "if (cell == nil) {...}".