2011-12-12 1 views
2

J'utilise Storyboard et j'essaie de revenir à un écran précédent lorsqu'une certaine condition est remplie. IE, le nom d'utilisateur est introuvable lors de la connexion.Storyboard - retour automatique à l'écran précédent à l'état

Essentiellement, l'utilisateur tape son information et appuie sur un bouton. Si l'information est incorrecte ou introuvable, je montre un message UIAlertView pour les informer des informations incorrectes. En raison de l'ordre des choses sont faites, la transition de l'écran se produit sur le bouton avant que j'ai vérifié toutes les données avec le serveur. Je ne peux donc pas arrêter le changement d'écran avant de vérifier.

Je vérifie pour la presse bouton de l'utilisateur dans le UIAlertView pour le signal de revenir avec cette méthode ..

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 

} 

Je suis en train d'utiliser une ligne dans cette méthode pour revenir à l'écran précédent, mais Rien ne se passe. Je suppose que les storyboards fonctionnent différemment mais je ne connais pas la syntaxe pour revenir à l'écran précédent avec eux.

Merci.

+0

Cela ne répond pas vraiment à votre question ici, mais il pourrait être préférable de revenir à l'écran de connexion et de présenter un message non-modal qui permet à l'utilisateur de savoir ce qui se passe. UIAlertView devrait être utilisé avec parcimonie et non-modal est une meilleure expérience utilisateur. – Besi

+0

C'est bien. Mais comment revenir automatiquement au premier écran? Le problème ici n'est pas moi essayant de le faire dans UIAlertView. Je ne peux pas revenir automatiquement au premier écran à moins que l'utilisateur n'appuie sur un bouton «retour» sur l'écran suivant. –

Répondre

1

Si votre storyboard pousse un contrôleur de vue, vous pouvez toujours le faire apparaître par programmation. ce n'est pas un problème. Le problème ici est que le UIAlertView est montré en utilisant une animation et donc vous ne pouvez pas effectuer une autre animation en une seule fois.

  1. Vous avez donc deux options. Faire sauter le contrôleur de vue sans animation devrait fonctionner, mais l'utilisateur pourrait ne pas réaliser où il va.

  2. Vous pouvez placer l'appel qui place le viewcontroller dans une méthode d'assistance et appeler cette méthode comme suit: [self performSelector:@selector(myPopHelperMethod:) withObject:nil afterDelay:0.8f]. Cela devrait faire apparaître votre contrôleur de vue après 0,8 seconde, ce qui est suffisant pour permettre à UIAlertView de terminer son animation.

+0

J'ai mis le popViewControllerAnimated: à NO et cela n'a pas semblé affecter quoi que ce soit. J'ai aussi essayé la méthode helper. J'appelle toujours [self.navigationController popViewControllerAnimated: YES]; dans myPopHelperMethod droite? Si oui, cela ne fait rien non plus. Est-il possible d'arrêter le changement de vue lorsque l'utilisateur appuie sur le bouton jusqu'à ce que je dise à? Je ne sais pas comment programmer par programmation lorsque les écrans sont modifiés avec des storyboards. Je ne sais comment les connecter simplement via le Ctrl + clic glisser dans la vue Storyboard. –

+0

Etes-vous sûr que self.navigationController n'est pas nul, lorsque vous essayez de faire apparaître votre contrôleur de vue? – Besi

+0

Dans une recherche plus poussée, il apparaît que le storyboard n'utilise pas du tout les contrôleurs de navigation par défaut. Ils doivent être ajoutés, ce qui est évidemment la raison pour laquelle il serait nul. Mais cela me ferait penser qu'il n'est pas du tout nécessaire de faire ce que je veux en premier lieu. –

0

Je suppose que votre self.navigationController est nul, ce qui rend votre méthode non-op.

+0

Je vais examiner cela. –

+0

Dans une recherche plus approfondie, il semble que le storyboard n'utilise pas du tout les contrôleurs de navigation par défaut. Ils doivent être ajoutés, ce qui est évidemment la raison pour laquelle il serait nul. Mais cela me ferait penser qu'il n'est pas du tout nécessaire de faire ce que je veux en premier lieu. –

+0

Ah, vous avez sûrement raison, il doit y avoir un autre moyen alors. – jv42

Questions connexes