Changer une vue perso
UniX
Membre
Salut.
J'ai une vue perso placée dans une fenêtre d'un nib. Dans ce même nib, j'ai défini 2 autres vues qui apparaissent dans la fenêtre ou l'on voit le file's owner et le first responder.
Comment faire pour que ma vue perso soit vueAfficheurs ou vueEchelle selon le cas ?
En fait, je voudrais faire l'équivalent de setContentView: pour NSWindow, mais appliqué à une vue, pas à une fenêtre entière.
Merci.
J'ai une vue perso placée dans une fenêtre d'un nib. Dans ce même nib, j'ai défini 2 autres vues qui apparaissent dans la fenêtre ou l'on voit le file's owner et le first responder.
Comment faire pour que ma vue perso soit vueAfficheurs ou vueEchelle selon le cas ?
En fait, je voudrais faire l'équivalent de setContentView: pour NSWindow, mais appliqué à une vue, pas à une fenêtre entière.
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si j'ai bien compris ta question...
- Tu glisses un NSPanel dans la fenêtre de tes instances.
- Dans ce panel tu mets deux NSBox, de mêmes tailles, pour chacune de tes vues, vueAfficheurs et vueEchelle, que tu transfères dans ces NSBox.
- Dans ta fenêtre où tu permutes les vues tu mets une NSBox vide pour ta vue perso de même taille que celles ci-dessus. A noter que toutes les NSBox sont bien sur sans titres et sans contours.
- Tu définis les outlets de ton contrôleur vers l'offscreen panel, les 3 NSBox et ton contrôle pour la permutation, par exemple un bouton popup.
- Dans l'interfaçage du controleur tu définis les outlets :
[tt]
IBOutlet NSPanel *offScreenViewsPanel; // OffScreen Panel
IBOutlet NSView *vueAfficheurs;Â Â Â Â Â Â
IBOutlet NSView *vueEchelle;
IBOutlet NSBox *vuePerso;
IBOutlet NSPopUpButton *choixViewPopUp;
[/tt]
- Dans l'implémentation, tu mets le code suivant :
[tt]
// Lors de l'initialisation on retient les vues de l'offscreen panel avant de le releaser lui et ses vues.
-(void)awakeFromNib
{
  [vueAfficheurs retain];
  [vueAfficheurs removeFromSuperview];
  [vueEchelle retain];
  [vueEchelle removeFromSuperview];
  [offScreenViewsPanel release];
  offScreenViewsPanel=nil;
  [vuePerso setContentView:vueAfficheurs]; // Vue par défaut
}
// On permute la vue selon le choix
-(IBAction)choixTabView:(id)sender
{
  if ([[choixViewPopUp selectedItem] tag]==0)
  {
    [vuePerso setContentView:vueAfficheurs];
    return;
  }
  if ([[choixViewPopUp selectedItem] tag]==1)
  {
    [vuePerso setContentView:vueEchelle];
  }
}
-(void)dealloc
{
   [vueAfficheurs release];
   [vueEchelle release];
   [super dealloc];
}
[/tt]
On peut relier un outlet directement à une NSView dans la fenetre montrée par UniX, quel intéret de passer par un panel? En plus, ne passant pas par un panel, tu n'est pas obligé de t'occuper de la gestion de la mémoire.
C'est simplement pour une meilleure lisibilité dans IB. C'est vrai que pour 2 ou 3 views, ça n'embarrasse pas trop l'écran et la fenêtre d'instances dans IB, mais quand tu as par exemple 6 ou 7 views bien chargées en contrôles, ça devient vite le bazard dans IB, d'où l'intérêt de regrouper les views dans un panel pour soulager la fenêtre d'instances et l'écran de fenêtres multiples. Perso je trouve que c'est une bonne habitude même si ça demande un peu de code supplémentaire.
Lorsque je veux en afficher une, je supprime toutes les subViews de ma vue perso et je rajoute la bonne des 2.
Malheureusement, j'ai toujours ce satané problème de rafraichissement (enfin, j'imagine que c'est un problème de rafraichissement ...) >:( >:( >:(
Il faut que je réfléchisse à autre chose ....