web-dev-qa-db-fra.com

Lier un nouveau Viewcontroller au Storyboard?

Il y a probablement une solution simple mais je ne peux pas la découvrir.

J'utilise des storyboards pour l'interface.

Je commence par un contrôleur de barre d'onglets, mais avant que l'utilisateur ne soit autorisé à utiliser l'application, l'utilisateur doit s'authentifier via une vue de connexion qui est modalement poussée au début.

Je veux configurer la vue de connexion sur le même storyboard, mais je ne peux pas trouver comment lier le contrôleur de vue au storyboard et mon code.

Ce que j'ai fait:

  • Créez un nouveau fichier de creux de sous-classe UIViewController> nouveau> nouveau fichier.
  • Faites glisser un nouveau UIViewController dans le story-board
  • Définissez la classe dans l'onglet de classe personnalisé
  • fait glisser un UILabel à des fins de test.
  • courir

Pas de label...

28
Justin

Tirez sur un nouveau UIViewController qui agira comme contrôleur de vue de connexion sur le MainStoryboard. Dans l'inspecteur d'attributs, remplacez l'identifiant par LoginViewController (ou quelque chose de approprié). Puis ajouter

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];
}

au contrôleur First view et l'écran de connexion sera chargé à partir de votre storyboard et présenté.

J'espère que cela t'aides.

40
Scott Sherwood

La réponse de Scott Sherwood ci-dessus est la réponse la plus correcte que j'ai trouvée après beaucoup de recherches. Bien que très léger changement selon le nouveau SDK (6.1), presentModalViewController est obsolète.

Voici un tout petit changement à la réponse ci-dessus.

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    HomeViewController * hvc = [sb instantiateViewControllerWithIdentifier:@"LoginView"];
    [hvc setModalPresentationStyle:UIModalPresentationFullScreen];
    [self presentViewController:hvc animated:YES completion:nil]; 
6
OSXMonk

Je suis nouveau dans ce domaine. Mais si le premier contrôleur de vue est un contrôleur de vue de navigation et que son rootviewcontroller est un contrôleur de vue de table. Si vous souhaitez pousser un contrôleur de vue tel que LoginViewController lorsque vous cliquez sur la cellule et que vous souhaitez également revenir à la vue de table à l'aide de la barre de navigation. Je recommande de cette façon:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {

   UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
   UIViewController *controller = [sb instantiateViewControllerWithIdentifier:@"LoginViewController"];
   [self.navigationController pushViewController:controller   animated:YES];
}

De cette façon, vous pouvez avoir la navigation.

Soit dit en passant, je ne sais pas pourquoi ce type de problème que vous avez posé apparaîtra. Je suppose que lorsque le loginviewcontroller est créé dans le code, sa vue n'est pas la vue dans le storyboard. Si quelqu'un connaît la cause, dites-le moi! Merci!

1
My Soul Your Beats