2014-04-22 3 views
1

J'ai un UINavigationController sur lequel je charge un rootView qui contrôle le processus de connexion à mon application.Comment recharger rootViewController depuis appDelegate

J'ai récemment ajouté du code à mon délégué d'application qui vérifie mon paquet de paramètres pour une demande de déconnexion lorsque cette demande de déconnexion arrive. Je voudrais soit recharger le rootView pour qu'il charge le login hud, ou simplement appeler la méthode rootView qui montre le login hud.

Voilà comment je mis le rootView pour le NavigationController dans mon appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window.rootViewController = self.navigationController; //Adds RootViewController to the NavigationController interface 
    // etc 
} 

Ce que je voudrais savoir est-il un moyen de recharger RootViewController? ou appelez-en une méthode à l'intérieur du délégué d'application?

+0

Pour appeler une méthode à l'intérieur d'un autre contrôleur, vous pouvez utiliser le modèle délégué, le modèle cible/action ou le modèle de notification. Lisez la façon dont ils fonctionnent tous, en particulier dans iOS/OS X, pour déterminer ce qui est le mieux à utiliser (vous faites iOS mais c'est la même chose sur OS X et une meilleure documentation est disponible). –

Répondre

2

Cela peut être fait mais c'est compliqué. Il est préférable de l'éviter si possible, et les exigences spécifiques seront différentes pour chaque application. Sans voir le code source de votre application, nous ne pouvons pas vous dire comment cela a été fait.

Le processus de base consiste à supprimer tous les éléments de la vue et à définir toutes les références à zéro, puis à les recréer à partir du code ou en chargeant à nouveau la pointe.

Une meilleure option est de laisser le rootViewController où il est, et de présenter un contrôleur de connexion modale par-dessus. Une fois que l'utilisateur s'est connecté, envoyez un NSNotification que le contrôleur de vue racine peut observer et remplissez ses données. Attendez que la notification ait été envoyée pour masquer le contrôleur de connexion et attendez que le contrôleur de vue racine bloque le thread principal pendant qu'il effectue toutes les opérations réseau relatives à la connexion. Ainsi, la vue de connexion (avec une dans ... "message?) restera visible jusqu'à ce que la vue racine soit entièrement remplie.

+0

okay .. cette dose fait beaucoup plus de sens .. Merci pour votre réponse. – HurkNburkS

+0

La partie difficile est de mettre toutes les références à zéro. Il y a beaucoup de références, dont certaines que vous ne connaissez peut-être pas. –

+0

right .. Je pense que votre idée d'avoir une vue dédiée à loggin in/out est le pari le plus intelligent. la raison pour laquelle je l'ai implémenté dans ma vue racine était parce que je n'ai jamais montré à l'utilisateur l'écran de connexion et je ne savais pas que cette limitation existait. – HurkNburkS

Questions connexes