2011-06-15 8 views
0

J'ai une vue de la table et quelques boutons à l'intérieur. 4 boutons dans une rangée puis 4 autres dans la deuxième rangée et ainsi de suite. J'utilise array pour ajouter des images aux boutons.Rechargement d'images dans les boutons présents dans les cellules de la vue de table lors du rechargement de la vue de la table

Pour la première fois, cela fonctionne correctement, mais lorsque vous supprimez tous les éléments de la matrice et de nouveaux objets dans la matrice, puis appelez la vue de rechargement de la table, les nouvelles données ne sont pas rechargées.

Quelle pourrait être la raison?

Je posterai une partie de mon code:

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

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    // if (cell == nil) { 
    // cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
    // } 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    if(indexPath.row == 0) 
    { 
     button1=[[UIButton alloc] initWithFrame:CGRectMake(15,5,100,87)]; 
     [button1 setImage:[array objectAtindex:0] 
     [button1 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell.contentView addSubview:self.button1]; 

     button2=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)]; 
     [button2 setImage:[array objectAtindex:1] forState:UIControlStateNormal]; 
     [button2 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell.contentView addSubview:button2]; 
    } 
    else if(indexPath.row == 1) 
    { 
     button3=[[UIButton alloc] initWithFrame:CGRectMake(15,5,100,87)]; 
     [button3 setImage:[array objectAtindex:2] forState:UIControlStateNormal]; 
     [button3 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell.contentView addSubview:button3]; 


     button4=[[UIButton alloc] initWithFrame:CGRectMake(135,5,100,87)]; 
     [button4 setImage:[array objectAtindex:3] forState:UIControlStateNormal]; 
     [button4 addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell.contentView addSubview:button4]; 
    } 
    else 
    { 
     // Do something here 
    } 
    return cell; 
} 

mon bouton de clic:

-(IBAction)clickToDisplayImage { 
    [text resignFirstResponder]; 
    if([imageArray count] >0) 
    { 
     [imageArray removeAllObjects]; 
    } 
    int totalImages = [text.text intValue]; 

    for(int i=0;i<totalImages;i++) 
    { 
     [imageArray addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i]]]; 
    } 
    [tableView reloadData]; 

}

+0

Hrm. Je ne sais pas pourquoi les gens sont en train de voter ici. Assez clair quelle est la question ici. – RedBlueThing

+0

Avez-vous pu résoudre le problème que vous aviez? – RedBlueThing

+0

pas encore ......... – Christina

Répondre

0

Lorsque vous appelez reloadData sur votre UITableView, votre cellForRowAtIndexPath Le message sera appelé pour remplir la ligne. Comme vous avez déjà créé les cellules à partir du premier passage, lorsque vous appelez dequeueReusableCellWithIdentifier, vous récupérez les cellules créées à l'origine associées à l'identifiant @ "Cell".

Vous pouvez confirmer cela en définissant un point d'arrêt et vérifier que la deuxième fois à travers vous obtiendrez votre cellule de dequeueReusableCellWithIdentifier (plutôt qu'une cellule nouvellement créée). Vous allez alors ajouter de nouvelles sous-vues à cette cellule originale (donc quatre sous-vues de bouton pour la cellule, puis six, huit etc ...). Ce que vous devriez faire est d'ajouter seulement les sous-vues de bouton lorsque vous créez la cellule (donc déplacez le bouton créer des choses dans le bloc if (cell == nil)) et vous devriez utiliser un identifiant de cellule basé sur le rangée de table. Quelque chose comme:

- (UIButton*) getButtonLeft:(BOOL)left atIndex:(int)index 
{ 
    UIButton * button =[[UIButton alloc] initWithFrame:CGRectMake((left ? 15 : 135),5,100,87)]; 
    [button setImage:[array objectAtindex:index] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(ClickTo:) forControlEvents:UIControlEventTouchUpInside]; 
    return button; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // both rows are different so we should use a different re-use id. 
    NSString * CellIdentifier= [NSString stringWithFormat:@"Cell%d", indexPath.row]; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 

     switch (indexPath.row) 
     { 
      case 0: 
       button1 = [self getButtonLeft:YES atIndex:indexPath.row]; 
       [cell.contentView addSubview:button1]; 
       break; 
      case 1: 
       button2 = [self getButtonLeft:NO atIndex:indexPath.row]; 
       [cell.contentView addSubview:button2]; 
       break; 
      case 2: 
       button3 = [self getButtonLeft:YES atIndex:indexPath.row]; 
       [cell.contentView addSubview:button3]; 
       break; 
      case 3: 
       button4 = [self getButtonLeft:NO atIndex:indexPath.row]; 
       [cell.contentView addSubview:button4]; 
       break; 
      default: 
       // other cells? 
       break; 
     } 
    } 

    // if you need to modify the cell you have dequeued/created this is where you would do that 

    return cell; 
} 

N.B. Je n'ai pas exécuté ce code à travers un compilateur, donc des erreurs de syntaxe ware;)

+0

Désolé bu depuis que je n'ai rien fait de ce genre, donc je suis un peu confus, s'il vous plaît ca vous changez cela dans mon code et montrez-moi s'il vous plaît – Christina

+0

@Christina Sure. Je vais mettre à jour ma réponse :) – RedBlueThing

+0

wats le but de ce getbuttonleft et où shoul j'écris ceci – Christina

Questions connexes