2010-08-27 4 views

Répondre

10

La façon la plus simple d'implémenter cela est d'utiliser Delegates.

Définir un protocole dans votre CustomTableCell.h comme ceci:

@protocol CustomTableCellDelegate <NSObject> 
@required 
- (void)reloadMyTable; 
@end 

L'étape suivante est de fournir un délégué var:

@interface CustomTableCell : UITableViewCell { 
    id<CustomTableCellDelegate> delegate; 
} 

@property (assign) id<CustomTableCellDelegate> delegate; 

Marque shure vous Synthétiser votre délégué-variable dans le CustomTableCell .m.

Vous avez maintenant un délégué défini. Il y a trois étapes restantes:

Lorsque vous créez votre cellule, vous devez définir le délégué pour cette cellule comme

cell.delegate = self; 

Marque SHURE votre TableViewController implémente votre CustomTableCellDelegate. Si vous faites cela, vous serez obligé de mettre en œuvre le - (void) reloadMyTable dans votre TableViewController:

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

La dernière étape consiste à appeler cette méthode à partir de votre CustomTableCell comme ceci:

if (self.delegate != NULL && [self.delegate respondsToSelector:@selector(reloadMyTable)]) { 
    [delegate reloadMyTable]; 
} 

En savoir plus sur Délégation here. En bref: Vous définissez un protocole dans votre CustomTableViewCell, implémenté par TableViewController. Si vous envoyez un message de méthode à votre délégué, ce message sera envoyé à votre TableViewController.

+0

jusqu'à présent la seule chose que je ne suis pas clair est l'endroit où vous dites: assurez-vous de r tableviewcontroller implémente votre délégué TableCell personnalisé. – Brodie

+0

mépris je l'ai eu, merci – Brodie

+0

@audience. Où puis-je mettre le code de la dernière étape? Je veux dire dans quelle méthode il devrait être appeler –

2

La meilleure façon de créer une notification. Dans votre tableView, vous devez le créer. Il est très facile, quelque chose comme ceci:

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(reloadTableView:) 
             name:@"reloadTable" 
             object:nil]; 

Ensuite, vous devez créer méthode:

- (void)reloadTableView:(NSNotification *)notif { 
     [self.yourTableName reloadData]; 

}

et ne pas oublier de supprimer la notification:

-(void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"reloadTable"  object:nil]; 

}

et en yo ur personnalisée tableViewCell quand vous voulez recharger la table dont vous avez besoin:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTable" 
               object:nil]; 
+0

Elégant et moins de code que la solution Delegates. +1 – user623396

+0

Je n'appellerais pas cela le meilleur moyen, beaucoup préfèrent la délégation moi-même. – tagy22

Questions connexes