2011-06-16 3 views
0

Je charge un UITableView, il aura parfois 5 cellules et parfois 4 cellules. En fonction du nombre de cellules, je veux définir le bouton AccessoryDetail pour la ligne 2 ou 3. Je sais que la condition fonctionne parce que je l'ai essayé avec succès avec didSelectRowAtIndexPath: mais pour une raison quelconque, la TableView ne semble pas obtenir mis à jour en fonction du nombre de lignes affichées. Je recharge avec succès les données TableView dans viewWillAppear: avec [tableView reloadData] mais cela ne s'occupe pas du problème AccessoryDetail pour moi. J'ai essayé d'utiliser [tableView reloadInputViews] en vain. Le problème est que l'image AccessoryDetail est toujours définie sur la ligne 2 ou 3 en fonction de la vue que je commence à charger à partir de l'application.iOS AccessoryDetail image ne se met pas à jour lors du rechargement UITableView

est ici la logique de la méthode cellForRowAtIndexPath::

if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) { 
      cell.selectionStyle = UITableViewCellSelectionStyleGray; 
      cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
     } 

EDIT: J'ai changé ma méthode selon la suggestion de Simon Lee avec une clause d'autre à ressembler à cela, mais il ne semble pas fonctionner soit :

if (cell == nil) { 

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:OfficeCellIdentifier] autorelease]; 


if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) { 
    cell.selectionStyle = UITableViewCellSelectionStyleGray; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
//NSLog(@"row == 2 && [[self.office boxAddress] length] == 0 || row == 3"); 
} else { 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 

} 
+0

@Veuillez préciser votre question. Soit en postant votre méthode cellForRowAtIndexPath, soit en postant une capture d'écran. –

Répondre

1

Placez l'instruction if-else en dehors du bloc de code if (cell == nil). Si vous réutilisez la cellule, aucun code n'est appelé.

if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:OfficeCellIdentifier] autorelease]; 
} 

if ((row == 2) && ([[self.office boxAddress] length] == 0) || (row == 3) && ([[self.office boxAddress] length] != 0)) { 
    cell.selectionStyle = UITableViewCellSelectionStyleGray; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
} else { 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    cell.accessoryType = UITableViewCellAccessoryNone; 
} 
+0

Merci, j'ai pensé que moi-même après quelques essais et erreurs enfin! –

1

vous devez réinitialiser le style de sélection et type d'accessoire, vous avez pas de clause d'autre là-dedans ... une fois que vous définissez, qui est, si vous réutilisez les cellules, ils ne seront jamais leur remise à zéro accessoire ...

+0

J'ai ajouté la clause else mais cela ne semble pas faire quoi que ce soit (voir mon edit). –

Questions connexes