57 votes

Moyens alternatifs pour pousser les contrôleurs de vue avec storyboard par programmation

Je suis à la recherche d'autres moyens de pousser la vue des contrôleurs de instancié sur le storyboard de la programmation. En fait, j'ai trouvé deux façons, que j'utilise pour aller à la vue suivante, mais aussi de revenir à la précédente:

  1. à l'aide de pushViewController:

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
    LocationWebView *lvc = [storyboard instantiateViewControllerWithIdentifier:@"LocationWebView"];
    [self.navigationController pushViewController:lvc animated:YES];
    
  2. l'exécution Segue programme:

    [self performSegueWithIdentifier: @"SongSegue" sender: self];
    

Avez-vous quelques conseils sur les alternatives et sur la meilleure façon cette opération doit être effectuée? Notez que je ne parle pas des points de vue modal.

36voto

rickster Points 19870

Apple recommande d'utiliser performSegueWithIdentifier:sender:someObject de programmation pour effectuer enchaîne. Il existe au moins un couple d'avantages à le faire de cette façon:

  • Moins de votre propre code signifie que vous êtes en laissant le cadre de faire plus de travail. Si Apple arrive avec quelques super-cool de nouveaux effets visuels pour pousser enchaîne, ou améliore les performances, ou corrige un bug dans certaines future version d'iOS, votre application peut obtenir gratuitement. Et chaque ligne de code que vous écrivez pour faire un travail le cadre pourrait être fait pour vous augmente votre chance de la rédaction de bugs.

  • En plus de l'IB peut signifier plus facile à modifier. Si vous décidez que vous voulez modifier tous vos push enchaîne à modale enchaîne, ou de la coutume, des enchaînements de type où vous faire votre propre super-cool, effet visuel, vous pouvez choisir 'em all au bureau de l'IB et de modifier la séquence type en un seul clic au lieu de rechercher dans votre code.


En outre, si vous utilisez la première ou la deuxième méthode, poussant un view controller afin de "revenir" à la vue précédente contrôleur ne fonctionne pas de la façon dont vos utilisateurs attendent. Lorsque vous appuyez sur un SongViewController, il est ajouté à la fin de la pile de navigation:

LocationViewController -> SongViewController

Ensuite, si vous poussez LocationViewController de nouveau à "revenir":

LocationViewController -> SongViewController -> LocationViewController

Si l'utilisateur appuie sur le bouton précédent de la barre de navigation, ils vont revenir en arrière à partir de l'emplacement de la vue à la chanson de vue de l'emplacement de l'afficher de nouveau. (Aussi, si vous continuez à faire cela, tous les "back" et "forward" ajouter à une augmentation croissante de la chaîne de vue des contrôleurs, qui pourrait conduire à d'autres problèmes.)

Au lieu de cela, vous devriez laisser la manette de navigation poignée de revenir. Il met un bouton dans la barre de navigation pour ce faire, ce qui devrait convenir à la plupart des cas d'utilisation. Si vous avez besoin de faire votre propre contrôle de revenir en arrière, vous ne pouvez pas le faire au bureau de l'IB avec iOS 5, mais vous pouvez le faire par programmation avec la manette de navigation de l' popViewControllerAnimated: méthode.

4voto

gfrigon Points 573

Personnellement, j'utilise le n ° 2 quand je suis dans un UIViewController qui est sous un UINavigationController. Je ne pense pas que cela fonctionnera s'il n'y a pas d'UINavigationController.

Lorsque j'utilise une vue située sous un UITabBarController, j'utilise le code suivant pour passer à un autre onglet:

 NSUInteger tabIndex = 2; // Index of the tab I want to select
UIViewController * viewCtrl = [_tabController.viewControllers objectAtIndex:tabIndex];
_tabController.selectedViewController = viewCtrl;
 

1voto

Ilan lewin Points 172

Yassassin la réponse a été bonne pour moi. Habituellement j'utilise enchaîne, puis déclencher par programmation, cependant j'ai besoin d'une transition à partir d'un ViewController à un autre de la même classe !! Dans le storyboard de l'éditeur, je ne pouvais pas trouver un moyen de créer une séquence à partir d'une vue contrôleur à la même sans créer manuellement de nouveaux contrôleurs de vue, je n'ai besoin que de deux niveaux de l'instanciation, toutefois Imaginer que quelqu'un a besoin de chaîne 5 de ceux-ci, Il serait stupide de créer 5 de ces contrôleurs dans le storyboard. Ilan

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X