2010-03-23 4 views
2

Je suis sûr que c'est une question facile, mais qui m'a échappé depuis un certain temps maintenant.Qu'est-ce qui provoque l'activation d'un UIViewController?

que j'ai un UIViewController, soit défini comme une racine d'un XIB ou sur une pile. À un moment donné dans mon code, je veux le remplacer par un autre contrôleur de vue. Juste à plat remplacer le. Comment ferais-je cela?

J'ai essayé de définir le contrôleur et l'affectation, mais ne sais pas ce qui en fait pousser en fait sur l'écran avec l'absence d'un contrôleur de navigation.

+0

Je viens de trouver la réponse à celle-ci, était beaucoup plus simple que je pensais: Remplacez simplement self.view par la nouvelle vue des contrôleurs de vue. –

Répondre

1

Je pense que quand vous dites que vous voulez remplacer le contrôleur de vue, ce que vous entendez réellement est que vous voulez remplacer la vue. Gardez à l'esprit que les contrôleurs de vue ne sont pas visibles, mais que chaque contrôleur de vue est mappé à une vue, ce qui peut devenir visible en étant ajouté en tant que sous-vue d'une vue visible.

Votre solution de remplacement self.view avec vue du nouveau contrôleur de vue peut fonctionner dans votre cas particulier, mais il est sans doute pas la « bonne » réponse à votre question. Il y aura des cas où cette solution ne fonctionnera pas pour vous.

Disons que vous avez une vue simple application sans contrôleur de navigation et aucun contrôleur de barre d'onglets. Dans votre délégué d'application, vous construisez une instance de YourFirstViewController et vous appelez [window addSubview: yourFirstController] ;. Votre hiérarchie d'affichage est maintenant constituée d'une UIWindow avec une seule sous-vue - la vue de YourFirstViewController.

Maintenant, disons que l'utilisateur appuie sur un bouton sur ce point de vue, qui est gérée par un IBAction défini dans YourFirstViewController. Vous voulez répondre en "remplaçant" la vue de YourFirstViewController par une vue associée à YourSecondViewController. Je mets "remplacement" entre guillemets parce que nous présentons plus couramment une vue en poussant son contrôleur de vue sur une pile de navigation, ou en appelant presentModalViewController: animated: pour présenter la vue modalement, mais supposons que vous avez rejeté ces options pour une raison quelconque, et vous voulez réellement remplacer manuellement la vue de YourFirstViewController avec l'affichage de YourSecondViewController.

Il s'agit simplement de manipuler la hiérarchie de vue. Vous souhaitez supprimer la vue de YourFirstViewController de sa vue d'ensemble (l'UIWindow dans ce cas), et vous souhaitez ajouter l'affichage de YourSecondViewController en tant que sous-vue pour le remplacer. Votre action serait donc ressembler à quelque chose comme ceci:

- (IBAction)replaceButtonClicked { 
    UIView *mySuperview = self.view.superview; 
    YourSecondViewController *secondController = [[YourSecondViewController alloc] init]; 
    [mySuperview addSubview:secondController.view]; 
    [self.view removeFromSuperview]; 
    [secondController release]; 
} 

Lorsque nous utilisons des méthodes comme une -pushViewController: animée: ou -presentModalViewController, le contrôleur recevant la hiérarchie manipule vue pour nous. Cela peut donner l'impression que nous regardons les contrôleurs de vue à l'écran, mais nous ne le sommes pas. Nous regardons juste une grande hiérarchie de vues imbriquées allant jusqu'à une UIWindow en haut.

0

Vous pouvez présenter un nouveau contrôleur de vue modally:

[self presentModalViewController:aViewController animated:YES]; 

Cela ne remplacera pas purement et simplement la VC actuelle, mais il affiche une nouvelle vue sur la vue actuelle.

Questions connexes