NSViewController & menus

frOMfrOM Membre
12:48 modifié dans API AppKit #1
Je fais une application "test" pour apprendre à  charger et décharger des vues et aussi maà®triser les actions de menus.

Je me suis inspiré du code du livre d'Hillegass pour le chargement des vues. Mon problème est avec les menus.

<br />- (void)windowControllerDidLoadNib:(NSWindowController *)windowController <br />{<br />&nbsp; &nbsp; [super windowControllerDidLoadNib:windowController];<br />	<br />	// Demande 1 : première vue affichée, menu activé et action exécutée<br />	[self displayViewController:[viewControllers objectAtIndex:0]];<br />	<br />	// Si demande 2 : seconde vue affichée, menu non activé !!<br />	//[self displayViewController:[viewControllers objectAtIndex:1]];<br />}<br /><br />- (id)init <br />{<br />&nbsp; &nbsp; self = [super init];<br />&nbsp; &nbsp; if (self != nil) {<br />		<br />		viewControllers = [[NSMutableArray alloc]init];<br />		ManagingViewController *vc;<br />		<br />		vc = [[FirstViewController alloc]init];<br />		[viewControllers addObject:vc];<br />		[vc release];<br />		<br />		vc = [[SecondViewController alloc]init];<br />		[viewControllers addObject:vc];<br />		[vc release];<br />		<br />&nbsp; &nbsp; }<br />	<br />&nbsp; &nbsp; return self;<br />}<br /><br />-(IBAction)changeViewController:(id)sender {<br />	<br />&nbsp; &nbsp; &nbsp; &nbsp; // par barre de menu<br />	[self displayViewController:[viewControllers objectAtIndex:[sender tag]]];<br />}<br /><br />-(void)displayViewController: (ManagingViewController *)vc {<br />	<br />	NSView *v = [vc view];<br />	[mainWindow setContentView:nil];<br />	[mainWindow setContentView:v];<br /><br />	[v setNextResponder:vc];<br />	[vc setNextResponder:mainWindow];<br /><br />}<br />


Comme je l'ai mis en commentaire dans le code, si je charge la première vue (index : 0), j'ai accès au menu et le code mis dans une sous-classe de mon ManagingController fonctionne. Si je change de vue, le menu reste grisé, et si je reviens à  la première vu, le menu est toujours grisé... Et ça ne marche d'aucune manière si je charge en premier la vue à  l'index 1 !!

J'ai dû louper une étape. Pourtant, les contrôleurs sont bien mis dans la chaà®ne des répondeurs.

<br />[v setNextResponder:vc];<br />[vc setNextResponder:mainWindow];<br />


J'ai fait toutes sortes de test, vérifié mes bindings... rien n'y fait.

Réponses

  • frOMfrOM Membre
    12:48 modifié #2
    Hé bien, la réponse est complètement "stupide" !  >:)   B)   :o

    Sur ma deuxième vue, il n'y avait pas d'objet qui puisse prendre le focus ! En rajoutant un textfield...
Connectez-vous ou Inscrivez-vous pour répondre.