2010-05-22 5 views
0

J'ai implémenté le menu d'édition de ma classe UITableViewCell personnalisée. J'ai un petit problème de mise à jour d'une vue de table à l'intérieur de la classe de cellule de table personnalisée. Quelle est la meilleure approche pour le faire?Mise à jour de uitableview à partir de la cellule personnalisée après l'avoir modifiée

TIA

Précision: par le menu d'édition que je voulais dire une norme Couper/Copier/Coller ... menu, qui peut se conforme à un protocole standard UIResponder. Je veux couper/copier/coller le contenu des cellules, qui réside dans une structure de données (type d'arborescence de dossiers/fichiers). La cellule reflète uniquement les données.

Le menu apparaît sur le robinet & tenir sur la cellule de tableau. La table est dérivée de UITableViewController et créée à la volée (pas du xib). Les actions Couper/Copier sont autorisées pour les dossiers &, tandis que l'action Coller est autorisée uniquement pour les dossiers. En fait, je n'ai besoin de rafraîchir que la cellule du dossier, qui montre le nombre d'éléments à l'intérieur.

Donc, dans mon CustomCell dans le sélecteur de pâte, je fais ce qui suit:

- (void)paste:(id)sender { 
    ... Perform a paste of data... 
    MyTableViewController *myTable = (MyTableViewController *) delegate; 
    [myTable performSelector:@selector(updateData) withObject:nil afterDelay:0.3]; 
} 

En MyTableViewController:

- (void) updateData 
{ 
    [self.tableView reloadData]; 
} 

La chose est que toutes les cellules, à l'exception de celui qui a été changé sont redessinés. Je le vois dans la fonction cellForRowAtIndex. Même si j'ajoute le sélecteur de pâte [self setNeedsDisplay] ça n'aide pas.

De plus, mes remplacements de cellules personnalisées fonction setHighlighted:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { 
    if (delegate) 
    [delegate copyableTableViewCell:self willHighlight:highlighted]; 
    [super setHighlighted:highlighted animated:animated]; 
} 

de sorte que le délégué (MyTableViewController) affiche un menu éditer. Et encore une fois la question est pourquoi la cellule modifiée ne se rafraîchit pas?

Merci

+0

Votre question est un peu vague. Qu'est-ce que le "menu d'édition"? Une UIActionSheet peut-être, ou une nouvelle vue poussée sur la pile de navigation? Par "mise à jour", voulez-vous dire éditer, ajouter ou supprimer une cellule de vue de table? Publier du code, comme votre méthode 'cellForRowAtIndexPath:' dans la source de données de la vue tableau, serait également utile. – Endemic

Répondre

0

Résolu. Appel à MyTableViewController:

- (void) updateData 
{ 
    [self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.3]; 
} 

et il fait le travail ...

0

Est-ce que vous souhaitez mettre à jour une seule cellule ou la totalité tableview? Qu'en est-il des délégués ou des sélecteurs?

+0

Il peut s'agir d'une seule cellule. J'ai essayé des délégués et des sélecteurs. J'ai essayé aussi de performerSelector afterDelay et ça ne s'appelle pas. Quelle est la meilleure pratique? –

Questions connexes