Exemple d'écran de connection modulaire basé sur le storyboard

J'apprends ios / xcode et à un roadblock.

J'ai un tabbarcontroller + design basée sur la navigation. Je dois présenter un écran de connection si l'user n'est pas connecté. Voici la hiérarchie de base. La page de connection a besoin d'une barre de navigation (comme le tutoriel que j'ai suivi met un button "Go" sur la barre.

LoginController: (LTController.h,.m) Main View:TabBarController> NavigationController>View1>View1a NavigationController>View2 

Disposition du storyboard

Je lis beaucoup de messages ici sur la vue modale, la méthode déléguée, etc. La plupart d'entre eux sont des extraits de code qui malheureusement sont un peu en dehors de mon niveau débutant.

Apprécierait une explication simple quant à la manière d'y parvenir. Surtout, une note sur les files qui ont besoin de changements serait super.

Merci

Voici un scénario. C'est si simple. J'espère juste que ce sera utile.

entrez la description de l'image ici

Pour UITableBarController, atsortingbuez un nom pour l'identité à l' ID du storyboard entrez la description de l'image ici

Ensuite, dans votre file de class ViewController Vous avez les informations d'identification d'authentification à droite>. Faites des choses là-bas pour l'authentification. puis suivez ce code. Ça fonctionne bien

 - (IBAction)Login:(id)sender { if(authenticated) // authenticated---> BOOL Value assign True only if Login Success { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UITabBarController *obj=[storyboard instantiateViewControllerWithIdentifier:@"tab"]; self.navigationController.navigationBarHidden=YES; [self.navigationController pushViewController:obj animated:YES]; } 

On dirait que vous partez du bon pied. Puisque vous avez une design de tabulation, vous devez faire un choix sur la façon de présenter la page de connection et quand vous le ferez.

vous devez le présenter avant que la barre d'tabs soit affichée, ou mettre de la logique dans votre premier controller de vue pour lancer le process de connection. Il y a d'autres façons, mais elles deviennent plus compliquées et je voulais vous donner des choix basiques maintenant.

Voici le concept général que je reorderais.

a) créer une variable de stockage persistante quelque part pour déterminer si un user est connecté ou non.

b) ajoutez une coche pour cet indicateur dans la méthode View will load du premier controller de vue attaché à votre barre d'tabs.

c) présenter une page de connection modale directement depuis le controller de vue. S'ils se connectent, il vaut mieux le rejeter, sinon, ils sont bloqués sur la page modale.

Donc, voici essentiellement comment faire cela:

à des fins d'explication, je vais appeler votre premier controller de vue – premier onglet sur votre controller de tabulation – fviewController – ok?

dans fviewController.m

 -(void)viewDidLoad { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([[defaults objectForKey:@"loggedIn"]boolValue]) { NSLog(@"user is logged in - do nothing"); } else { NSLog(@"User is not logged in"); [self performSegueWithIdentifier:@"LoginPage" sender:self]; } } 

quelques points de plus il semble que vous utilisez des storyboards et des segues. Dans ce cas, vous feriez ce qui suit:

  • créer un nouveau controller de vue pour votre page de connection
  • contrôle glisser une connection segue à partir du premier controller de vue dans votre barre de tabulation
  • identifier le segue comme "modal"
  • créer une nouvelle class de controller de vue pour le controller de vue de connection
  • présentez votre vue et gérez votre authentification
  • Si l'user est connecté, vous devez le stocker dans NSUserDefaults. Remarque: si vous avez plusieurs users ou d'autres schémas, vous pouvez modifier la valeur unique que je vous ai montrée dans l'exemple de l'état de la trace pour l'user actuel. Aussi: si vous avez un code de déconnection, vous devez définir le drapeau correctement. Aussi: si les users vont se connecter et se déconnecter fréquemment, alors utiliser la vue apparaîtra à la place de la vue a été chargée.

Pour returnner le statut:

  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setValue:[NSNumber numberWithBool:YES] forKey:@"loggedIn"]; //in [defaults setValue:[NSNumber numberWithBool:NO] forKey:@"loggedIn"]; //out do this in your login controller 

Pour rejeter la vue modale. Techniquement, vous devriez utiliser un callback délégué pour le faire, mais si vous essayez de garder les choses simples, cela devrait être correct

  [self dismissViewControllerAnimated:YES completion:^{ }]; 

Donc, votre logique serait comme ceci – se sont-ils connectés? Oui, puis définissez le statut OUI pour connecté, puis rejeter. S'ils ne se connectent pas, ne faites rien. Ils sont bloqués.

Enfin, si vous avez besoin de configurer votre controller de connection, vous utiliserez la méthode: prepareForSegue … pour initialiser les variables avant que le segue ne se produise. Vous avez probablement lu à ce sujet si vous faites des tutoriels.

Eh bien … j'espère que ça aide. C'est une approche très basique. Si cela fonctionne, vous pouvez continuer à y append plus de security et de fonctionnalités au fur et à mesure.

bonne chance.