2009-10-19 6 views
1

Mon problème semble assez simple mais je n'ai pas réussi à trouver une solution ici ou ailleurs. J'ai une UITableView en tant que sous-classe dans l'un de mes UIViews. Lorsque l'application termine la dernière cellule de table sélectionnée est enregistrée à NSUserDefaults et lorsque l'application redémarre, je veux définir la cellule sélectionnée comme avant. Cependant, cela pose des problèmes lorsque je le fais trop tôt car le nombre de sections est inconnu, c'est-à-dire que la table n'a pas encore chargé ses données. J'ai donc décidé de le mettre dans la fonction numberOfRowsInSection, qui fonctionne mais je suis sûr que ce n'est pas le bon endroit pour le faire.Quand UITableView a-t-il terminé la mise à jour?

- (NSInteger)tableView:(UITableView *)tableView 
    numberOfRowsInSection:(NSInteger)section 
{ 
    int iNofRows = 0; //Default 

    // It is not great doing this here but.... 
    if(bSetDefaultSelection == YES) 
    { 
     bSetDefaultSelection = NO; // Stop recursion 
     **NSIndexPath* indexPath = [NSIndexPath indexPathForRow:(NSUInteger)l last_sel_row inSection:(NSUInteger)0]; 
     [self selectRowAtIndexPath:indexPath animated:NO          scrollPosition:UITableViewScrollPositionMiddle];** 
    } 
    return iNofRows; 
} 

Répondre

4

Je pense que l'endroit que vous cherchez est

- (void)viewDidAppear:(BOOL)animated;  
// Called when the view has been fully transitioned onto the screen. Default does nothing 

(Voir UIViewController pour plus d'informations) Je viens débogués mon application et cette méthode est appelée après celui que vous avez mentionné:

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

Dans votre cas, vous auriez à écrire quelque chose comme:

- (void)viewDidAppear:(BOOL)animated{ 
    NSIndexPath* indexPath = [NSIndexPath indexPathForRow:(NSUInteger)l last_sel_row inSection:(NSUInteger)0]; 
    [self selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 
} 

À la votre!

0

Salut merci pour la réponse. Je pensais que personne ne répondait autant apprécier l'effort. La solution avec '(void) viewDidAppear: (BOOL) animate' ne fonctionne qu'avec UITableViewController mais j'ai affaire à UITableView. Mais j'ai décidé de poster une notification dans mon contrôleur principal qui déclenche la sélection de la table et qui fonctionne bien. Merci encore.

Questions connexes