Question

J'écris une fonction « charge » pour mon application actuelle de l'iPhone.

Pratiquement ce que je veux faire est de revenir à l'utilisateur où il / elle laissé. Pour ce faire, je veux recréer tous les UIViewControllers se sont présentés devant.

Mon problème est le UIViewControllers n'apparaîtra si je l'appelle simplement [[self navigationController] pushViewController:newController animated:YES];.

Le même code fonctionne très bien lorsqu'il est appelé en tant que gestionnaire d'événements, comme après avoir touché un bouton. Mais si je le fais même sans même (par ex. En viewDidLoad) méthode de loadView du nouveau contrôleur de vue ne sera pas appelé.

Mon code actuel (avec quelques éléments pseudo):

- (void)viewDidLoad {
    [super viewDidLoad];
    if (loading)
        [self onSomeEvent];
}

- (void)onSomeEvent {
    UIViewController *newController = //init....;
    [[self navigationController] pushViewController:newController animated:YES];
    [newController release];
}

Je suppose que viewDidLoad n'est pas le bon endroit pour faire un tel appel, mais ce qui est?

Était-ce utile?

La solution

Je ne suis pas sûr que la diffusion de votre fonction « charge » tous vos contrôleurs accross est la meilleure façon d'y parvenir.

Je mettrais plutôt dans init de votre application, dans la partie applicationDidFinishLauching. Ensuite, vous avez un endroit centralisé où vous restaurer l'état précédent (plus facile à manipuler à mon humble avis).

Supposons que vous souhaitez implémenter une fonction de restauration plus avancées comme:

  • afficher un UIView de démarrage avec un indicateur d'activité pour indiquer à l'utilisateur que vous restaurez l'état précédent
  • restaurer la pile de vos contrôleurs dans le contrôleur de navigation
  • enlever les éclaboussures

il est plus facile d'avoir tout ce code dans le applicationDidFinishLauching: il est tout géré à un moment donné

.

Morever, lors de la restauration l'ancien état à votre contrôleur de navigation, vous pouvez éviter d'utiliser les transitions et utiliser animated:NO au lieu de YES en poussant vos contrôleurs. Il sera plus facile à gérer à partir de votre point de vue et le temps de restauration peut être diminuée si vous supprimez le temps nécessaire pour réaliser les transitions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top