Charger une sous-vue via interface builder
colas_
Membre
[SDK 10.6, Xcode 4.2]
Bonjour !
Voilà mon (nouveau) problème /crazy.gif' class='bbc_emoticon' alt=' ' /> ...
J'ai créé un couple NSViewController / fichier NIB.
Je les ai appelés HeaderViewController.
Je souhaiterais les ajouter dans ma fenêtre à l'aide d'interface builder.
Par conséquent, dans IB, je modifie MainMenu.xib comme suit :
Quand je charge l'appli, rien ne s'affiche...
J'ai pourtant l'impression de faire les choses selon la logique Apple.
Des idées ? Un problème de timing entre les 2 NIB ?
Merci !
PS : Voilà la méthode d'init de HeaderViewController
Bonjour !
Voilà mon (nouveau) problème /crazy.gif' class='bbc_emoticon' alt=' ' /> ...
J'ai créé un couple NSViewController / fichier NIB.
Je les ai appelés HeaderViewController.
Je souhaiterais les ajouter dans ma fenêtre à l'aide d'interface builder.
Par conséquent, dans IB, je modifie MainMenu.xib comme suit :
- J'ajoute une "Custom View" dans ma fenêtre. Je laisse sa classe à NSView.
- J'ajoute un Object dans les objets associés au NIB (cube bleu, que j'ajoute dans la barre de gauche). Je renomme sa classe à HeaderViewController.
- Enfin, je connecte l'outlet view de HeaderViewController à ma "Custom View". L'outlet view est semble-t-il fourni automatiquement par la class NSViewController. Dans ma classe HeaderViewController, je n'ai en effet aucun outlet view.
Quand je charge l'appli, rien ne s'affiche...
J'ai pourtant l'impression de faire les choses selon la logique Apple.
Des idées ? Un problème de timing entre les 2 NIB ?
Merci !
PS : Voilà la méthode d'init de HeaderViewController
- (id)init<br />
{<br />
NSLog(@"Création d'une instance de HeaderViewController");<br />
<br />
self = [super initWithNibName:@"HeaderViewController" bundle:nil];<br />
if (self) {<br />
// Initialization code here.<br />
}<br />
<br />
return self;<br />
}<br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
File's Owner est le propriétaire du fichier nib, c'est à dire celui qui l'instancie.
Evite de faire ça. Même si tu trouves idiot de passer le nom du nib quand tu crées ton HeaderViewController, le fait de passer ce nom permet d'utiliser des nib différents avec la même classe de view controller. Certes sur Mac, c'est moyennement utile, mais je le fais par exemple pour avoir des nib différents sur iPhone et sur iPad.
J'ai l'impression que de vouloir composer sa fenêtre avec plein de sous-vues (par exemple : header, main, etc.) n'est pas très adapté au fonctionnement de cocoa, et que j'ai plus intérêt à construire ma fenêtre en un seul nib. Cela vous semble-t-il vrai ?
Mais ce n'est pas l'approche conseillée: si la fenêtre comporte beaucoup de vues, ça fait autant d'outlets et d'actions, et le contrôleur devient très complexe. Scinder en plusieurs view controllers réduit cette complexité, mais demande plus d'expérience, puisqu'il faut passer le modèle d'un contrôleur à l'autre. (Apple impose l'utilisation des view controllers sous iOS).
[font=helvetica, arial, sans-serif]Merci ![/font]
Par exemple, si le modèle comporte un NSArray de Recettes, et qu'un view controller sert à afficher la recette courante, il suffit de créer une propriété dans le view controller:
Et le contrôleur parent devra passer la recette pour l'afficher:
Rien de compliqué, vraiment. Il faut juste passer les informations pertinentes pour le view controller enfant, et seulement celles-là .
Après c'est très simple... Si il y a beaucoup de vues, on peut écrire au sein d'une classe dérivant de NSView une méthode ajoutant des subView. Dans ce cas :
- écrire une classe correspondant à ces views.
- créer les instances de cette classe et les faire afficher dans la classe dérivant de NSView (celle qui est reliée à ton CustomView dans IB)
Exemple dans mon TechnoDrive, pour la table de mixage :
Dans le header de la NSView "mixTable" :
puis :
dans le "init" :
et dans le drawRect :
Je n'ai pas de classe qui dérive de NSView...
Je n'ai qu'une classe qui dérive de NSViewController...
NSView pilotera un CustomView dans IB, NSViewController pilotera toute une fenêtre (remplie de NSView...), par exemple quand tu ouvres une fenêtre en plus de la fenêtre principale. Ce ne sont pas du tout les même classes.
Vérification faite, je n'avais pas complètement tord néanmoins.