web-dev-qa-db-fra.com

différence entre presentViewController et UINavigationController?

Veuillez faire la différence entre presentViewController et UiNavigationController? Puis-je utiliser presentViewController au lieu de UINavigationController pour parcourir différentes vues dans l'application? Quel est le scénario à utiliser non plus?

33
user1940888

presentViewController offre un mécanisme pour afficher un soi-disant contrôleur de vue modale; c'est-à-dire un contrôleur de vue qui prendra le contrôle total de votre interface utilisateur en étant superposé au-dessus d'un contrôleur de présentation.

UINavigationController offre un mécanisme beaucoup plus flexible où vous pouvez pousser un nouveau contrôleur, puis le faire éclater, afin de revenir au précédent, de manière ordonnée. Imaginez que les contrôleurs d'un contrôleur de navigation construisent simplement une séquence de gauche à droite.

Je pense que presentViewController est le plus approprié pour une utilisation avec juste n contrôleur de vue présenté à la fois. Vous pouvez sûrement l'utiliser pour empiler plus de contrôleurs de vue les uns sur les autres (et donc "imiter" le contrôleur de navigation d'un pauvre), mais je parie que vous trouverez rapidement quelque chose qui ne fonctionne pas comme prévu.

Plus précisément, un exemple d'une telle limitation est le suivant: lorsque vous supprimez un contrôleur de vue modale (afin de le "fermer"), tous vos contrôleurs de vue présentés de façon modale (à partir du même contrôleur de présentation) seront également rejetés simultanément. Ainsi, vous ne pourrez tout simplement pas implémenter une fonctionnalité de type "retour en arrière"/navigation.

Cela dépend donc de ce que vous essayez de faire.

68
sergio

Un UINavigationController est une sous-classe de UIViewController qui gère une pile de contrôleurs de vue et ajoute un bouton de retour, etc.

presentViewController est une méthode de la classe UIViewController que vous utilisez pour présenter un contrôleur de vue modale.

24
Andrew Tetlaw

UINavigationController gère une pile de navigation pour vous. Vous pouvez alors naviguer dans le contenu hiérarchique.

http://developer.Apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

Si vous utilisez la méthode UIViewControllerspresentViewController, vous remplacez simplement le contrôleur de vue. aucune pile de navigation n'est conservée pour vous.

5
mgr

UINavigationController est une classe, presentViewController est une méthode d'instance d'UIViewController (iOS 5 +), dont UINavigationController est une sous-classe.

pushViewController est une méthode comparable à presentViewController. Il s'agit d'une méthode d'instance de UINavigationController, pour iOS 2 +

2
Andy