web-dev-qa-db-fra.com

Comment accéder à la pile dans UINavigationController

viewControllers

Les contrôleurs de vue actuellement sur la pile de navigation.

@property(nonatomic, copy) NSArray * viewControllers

Discussion

Le contrôleur de vue racine est à l'index 0 dans le tableau, le contrôleur de vue arrière est à l'index n-2 et le contrôleur supérieur est à l'index n-1, où n est le nombre d'éléments dans le tableau.

L'affectation d'un nouveau tableau de contrôleurs de vue à cette propriété équivaut à appeler la méthode setViewControllers: animated: avec le paramètre animé défini sur NO.

Je ne sais pas comment accéder à la pile J'ai trois vues dans le contrôleur de navigation - contrôleur de vue racine, emplacement de test sti, carte sti.

Comment accéder à la pile?

23
Dheeraj Kaveti

UINavigationControllers possède une propriété appelée viewControllers comme vous l'avez indiqué ci-dessus. Puisqu'il s'agit d'un tableau de contrôleurs de vue, référencer un contrôleur de vue spécifique dans cette hiérarchie n'est pas différent que d'accéder à tout autre objet dans un tableau.

UIViewController *theControllerYouWant = [self.navigationController.viewControllers objectAtIndex:(theIndexOfYourViewController)];

En outre, consultez l'article Contrôleurs de navigation dans la bibliothèque pour développeurs iOS, en particulier la section intitulée "Modification de la pile de navigation".

46
Convolution

En supposant que vous vouliez dire que votre contrôleur de navigation possède trois contrôleurs de vue, vous devriez pouvoir accéder au contrôleur de navigation à partir de l'un des trois contrôleurs de vue à l'aide de self.navigationController.

Donc, si vous voulez obtenir le deuxième contrôleur de vue dans la pile, vous devez faire -

UIViewController * viewController = [self.navigationController.viewControllers objectAtIndex:1];

Cela suppose qu'il existe au moins deux contrôleurs de vue sur le contrôleur de navigation.

5
Deepak Danduprolu

Le tableau renvoyé par la propriété viewControllers est la pile. Ils sont commandés dans le même ordre qu'ils ont été montrés. le contrôleur à l'index 0 est le contrôleur avec lequel vous avez commencé. Le contrôleur que vous regardez actuellement est l'indice le plus élevé. Étant donné que les index sont comptés à partir de zéro, le dernier index de l'élément sera le nombre (n) -1.

Maintenant, vous dites "vues" dans votre message. Il existe une différence entre les vues et les contrôleurs de vues. Si vous parlez de plusieurs pièces qui sont toutes visibles en même temps, vous parlez de vues et non de contrôleurs de vue. Le contrôleur de navigation sert à gérer plusieurs contrôleurs de vue. Si vous avez affaire à des vues, vous souhaitez accéder aux sous-vues de la vue actuelle du contrôleur de vue myViewController.view.subviews Ils s'ordonnent de manière similaire.

4
Dancreek