2011-10-21 3 views
1

c'est ma première question dans ce site génial. J'ai vraiment beaucoup cherché et pourtant trouver une réponse au problème suivant.Objectif c - Supprimer des lignes d'une vue de table

J'ai une vue de table avec 9 cellules. Une des cellules a un bouton de commutation. Lorsque la valeur du bouton commuté change, je veux supprimer 2 lignes de la vue de la table. J'ai écrit le code suivant:

- (IBAction)switchValueChanged:(id)sender { 
NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF"); 

NSArray *deleteIndexPaths = [NSArray arrayWithObjects: 
          [NSIndexPath indexPathForRow:1 inSection:0], 
          [NSIndexPath indexPathForRow:2 inSection:0], 
          nil]; 

UITableView *tableView = (UITableView *)self.view; 

[tableView beginUpdates]; 

[tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 
// I Have to change the number of rows in the section here. 

[tableView endUpdates]; 
} 

Quand je cours, je reçois un problème lié au nombre de lignes dans la section - ce nombre a été modifié, alors je dois changer. Je ne peux vraiment pas trouver comment je le change, mais je sais où je dois le changer (voir le code).

Comment puis-je le faire? comment puis-je appeler la méthode numberOfRowsInSection:NSInteger et définir également les lignes?

Merci beaucoup :)

Répondre

2

Le nombre de lignes dans le tableau est dans votre

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

Vous en avez besoin pour correspondre à la nouvelle nombre de lignes dans la table

---- EDIT

Cela signifie que vous devrez suivre le nombre de lignes dans votre table.

Commencez avec cet ensemble à 9 et supprimer 2 à chaque fois que vous changez le commutateur

- (IBAction)switchValueChanged:(id)sender { 
    NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF"); 

    // We are going to delete 2 rows 
    numberOfRows -= 2; 
    ... 

et dans votre numberOfRowsInSection au lieu de retourner 9 chaque fois, retourner le nouveau nombre de lignes

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return numberOfRows; 
} 
+0

Mais comment puis-je appeler cette méthode? J'ai déjà implémenté cette méthode, en la configurant pour retourner 9. Dois-je encore implémenter cette méthode? – ozking

+0

Voir ma vérification pour plus de détails. Fondamentalement, vous devez retourner le nombre de lignes dans la table _après le delete_ - la vue de table appellera ceci automatiquement pour vous. Vous supprimez deux lignes de sorte que vous devez retourner 7 au lieu de 9. – deanWombourne

+0

J'ai réussi, merci :) – ozking

0

Vous devez supprimer les données de la source de données et non les cellules du tableau, puis simplement actualiser la vue de la table. Au moins c'est comme ça que je ferais le design.

+0

Je n'ai pas de source de données, j'ai créé les cellules manuellement. Je ne peux pas les supprimer car je dois les réinsérer plus tard. – ozking

+0

Ensuite, vous avez besoin de deux tableaux de cellules - un pour les cellules actuellement visibles et un pour les cellules que vous avez supprimées. Dans votre méthode switchvaluechanged déplacez les deux cellules entre les tableaux. Lorsque vous implémentez numberOfRowsInSection ne renvoie pas 9, renvoyez le nombre d'éléments dans le tableau de cellules visibles. – deanWombourne

+0

ou vous pouvez simplement mettre un drapeau sur chacun de vos objets: displayTheObject et ensuite (comme deanWombourne mentionné) retourner seulement le nombre d'objets sans ce drapeau. – alinoz

0

Vous devez également supprimer les données de la source de données de la vue tabulaire. La source de données est un conteneur contenant les données réelles affichées dans la vue tabulaire. La simple suppression de la ligne supprime seulement l'élément visuel de la ligne, quand la vue de table est rechargée - elle voudra dessiner 9-2 rangées .... mais puisque le nombre de rangées renvoie toujours 9, elle lèvera une exception d'incohérence et vous dira Pourquoi. Voir le journal attentivement.

Questions connexes