-Non résolu- Changer de vue
Bonjour désolé pour cette question basique mais comment fait-on pour changer de vue dans une application ?
Ce que j'ai fait pour l'instant c'est que j'ai creé un xib de ma vue j'ai fait un fichier viewcontroller de cette vue. J'ai implementé la nouvelle vue dans mon controller de vue principale
dans un tuto j'ai récupéré le code suivant
le problème est que ce tuto sert a changer de vue quand on utilise un navigation menu controller d'ou
Comment faire si je n'ai pas de controlleur de navigation dans mon cas? Comment simplement changer de vue ?
Ce que j'ai fait pour l'instant c'est que j'ai creé un xib de ma vue j'ai fait un fichier viewcontroller de cette vue. J'ai implementé la nouvelle vue dans mon controller de vue principale
<br />RadarViewController *radarViewController;<br />@property (nonatomic, retain) RadarViewController *radarViewController;
dans un tuto j'ai récupéré le code suivant
if(radarViewController == nil)<br /> {<br /> //Initialize the controller.<br /> RadarViewController *aController = [[RadarViewController alloc] initWithNibName:@"RadarView" bundle:nil];<br /> <br /> //Set the controller to our variable.<br /> self.radarViewController = aController;<br /> <br /> //Release the temp controller<br /> [aController release];<br /> }<br /> <br /> //[radarViewController updateRowNumber:indexPath.row];<br /> <br /> //Add the controller to the top of the present view.<br /> [[self navigationController] pushViewController:radarViewController animated:YES];
le problème est que ce tuto sert a changer de vue quand on utilise un navigation menu controller d'ou
[[self navigationController] pushViewController:radarViewController animated:YES];
Comment faire si je n'ai pas de controlleur de navigation dans mon cas? Comment simplement changer de vue ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc un simple changement de la property view de ce NSViewController peut suffire
id oldView=[self view];
NSRect frame=[oldView frame];
// new view
MyView * newView=[[[nomDeLaClasseDeLaNouvelleView alloc] initWithFrame:frame type:aType] autorelease];
// replace view
NSView * superview=[oldView superview];
[superview replaceSubview:oldView with:newView];
self.view=newView; // fait un release sur oldView et un retain sur newView
Quelle différence entre les deux ? ce morceau de code ne fait pas référence au .nib ?!
A priori, aucun. A vérifier néanmoins compte-tenu de l'inversion du rôle des view et des window.
Il y a différentes possibilités :
• Si tu veux utiliser une vue stockée dans un autre nib, il faut changer le viewController, pas la vue.
• Si ton autre vue est dans le même nib que le UIViewController, tu n'as pas à créer newView, tu la définis comme un outlet.
• Si tu la crées de toute pièce, tu le fais dans le code comme ci-dessus
cette commande ?
en changant navigationController par ma vue ? mais ca ne marche pas
La seule différence, c'est que les vues sont créées dans le code. Mais je vois pas trop de problème pour les instancier à partir du nib:
- Soit dans le - (void)viewDidLoad{} d'un UIViewController, il suffit de récupérer les outlets des vues qui auront été au préalable déclarés dans le header. Dans ce cas, il faut utiliser la template pour application avec un nib.
- Soit en chargeant le nib à la main comme dans ton premier message.
J'ai constaté que le souci que j'ai est que mon application utilise un TabBarController c'est lui qui controle les vues. Et il n'y a pas de code source pour cette classe je ne peux donc pas modifier les évenements. Si je fais write class dans l'interface designer il me creer les deux classes mais il ne compile plus... Je suis un peu perdu la comment faire ?
Ensuite dans Xcode tu créé des classes de controller suivant quel type de controleur tu veux utiliser (image, vues, etc...)
Une fois cela de fait, tu retournes dans IB et affectes les différentes classes à tes controleurs.
Le problème du crash vient certainement du fait qu'il charge la mauvaises interface pour un controleur précis.