2 votes

Comment afficher une sous-vue chargée à partir d'un fichier NIB distinct ?

Je développe une application de bureau Cocoa qui utilise une liste de sources à la manière d'iTunes : différents éléments de la liste de sources entraînent l'affichage de différentes vues dans la zone de contenu principale.

La zone de contenu est entièrement remplie d'un NSSplitView ; à gauche, un NSOutlineView liste des sources. Lorsque l'utilisateur sélectionne un élément à gauche, la vue correspondante apparaît à droite du séparateur.

Je peux faire en sorte que cela fonctionne assez bien en mettant tout dans un fichier NIB et en plaçant un fichier NSTabView à droite du séparateur ; pour changer de vue, il suffit de changer l'onglet sélectionné. Mais mettre toutes les vues dans un seul NIB n'est pas une bonne pratique, alors j'essaie de déplacer chacune des sous-vues dans leurs propres fichiers NIB.

J'ai une idée assez précise de la majeure partie de ce processus - j'ai créé une NSViewController pour chacune de ces vues ( EntityDetailViewController , GroupDetailViewController et ainsi de suite), définir le Propriétaire du fichier de chaque nouvelle NIB à la classe de contrôleur correspondante, définir la classe de contrôleur view dans chaque NIB, et a retravaillé les liaisons. Ce que je ne sais pas, c'est comment changer la sous-vue qui est affichée à l'écran.

J'ai essayé d'utiliser la version générique par défaut NSView sur le côté droit et l'envoyer addSubview: J'ai essayé de m'y connecter en tant que première sous-vue et d'appeler

NSView *newSubview = /* get subview from the new subview controller */
[[subview superview] replaceSubview:subview with:newSubview];
[self setSubview:newSubview];

Mais tout laisse l'espace vide. Comment afficher une sous-vue chargée à partir d'une NIB distincte ?

0voto

Adam Preble Points 960

Votre approche générale semble judicieuse. Avez-vous vérifié que le newSubview du contrôleur de vue chargé est non nulle ? Le cadre de newSubview est correcte avant et après son ajout à la hiérarchie des vues ? Enfin, à quel moment utilisez-vous la fonction replaceSubview: code ? Il devrait se trouver dans awakeFromNib ou plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X