Problème d'accès/communication entre NSViews
Paisible.fr
Membre
Bonjour,
Je rencontre un problème d'accès/communication entre plusieurs NSViews.
Voici comment ce présente mon application :
Organisation des XIBs :
- Une MainWindows et une SplitView (la partie gauche sert de source, la droite de contenu : à la "iLife")
- Une NSView contenant un text field que je place dans la vue de droite de la splitView
- Une NSView que je place dans la partie gauche de la SplitView. Cette vue contient un NSSegmented avec 3 etats et une NSCustomView.
- 3 NSViews que je place dans la NSCustomView de la prècendente en fonction de l'état du NSSegmentedView
Détails en image :
Problème :
J'arrive très bien à faire fonctionner tout cela à l'aide de NSWiewController afin d'afficher les vues les unes dans les autres et de changer une vue par une autre lorsque c'est nécessaire.
En revanche je n'arrive pas à acceder au TextField de la partie "contenu" lorsque je fait un cliq dans un objet de la partie Source.
Concrétement j'ai dans la partie source une table avec des élements et lorsque je clique sur une ligne j'aimerais afficher un texte dans le textField de la partie contenu.
Mais je ne sais comment accéder à cette objet...
Je rencontre un problème d'accès/communication entre plusieurs NSViews.
Voici comment ce présente mon application :
Organisation des XIBs :
- Une MainWindows et une SplitView (la partie gauche sert de source, la droite de contenu : à la "iLife")
- Une NSView contenant un text field que je place dans la vue de droite de la splitView
- Une NSView que je place dans la partie gauche de la SplitView. Cette vue contient un NSSegmented avec 3 etats et une NSCustomView.
- 3 NSViews que je place dans la NSCustomView de la prècendente en fonction de l'état du NSSegmentedView
Détails en image :
Problème :
J'arrive très bien à faire fonctionner tout cela à l'aide de NSWiewController afin d'afficher les vues les unes dans les autres et de changer une vue par une autre lorsque c'est nécessaire.
En revanche je n'arrive pas à acceder au TextField de la partie "contenu" lorsque je fait un cliq dans un objet de la partie Source.
Concrétement j'ai dans la partie source une table avec des élements et lorsque je clique sur une ligne j'aimerais afficher un texte dans le textField de la partie contenu.
Mais je ne sais comment accéder à cette objet...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quand tu dis table, il s'agit d'une Table View sans doute.
Si c'est le cas, tu désigne ton contrôleur comme delegate de cette table view, qui réagira à l'action de l'utilisateur par une action sur le Text Field. le contrôleur a accès au text field directement par un IBOutlet, ou indirectement via la NSView contenant le text field
1) Oui il s'agit d'une NSTableView évidement
2) Je sais recupérer le click sur une ligne de la NSTableView via le Delegate.
Ce que me pose problème c'est de faire le IBOutlet vers le TextField qui est dans un autre XIB dans IB.
• Attribuer à File's Owner la classe MyViewControllerTextField
• Connecter l'IBOutlet textField dans le second xib
• Importer dans le premier XIB un objet auquel tu attribues la classe MyViewControllerTextField
et ça devrait rouler ..
Merci Philippe49 pour tes tentatives d'explications. Malheureusement je n'ai toujours pas compris.
J'ai essayé d'appliquer tes explications sans succès malgrè deux heures d'acharnement. :crackboom:-
Voici ce que j'ai fait :
(j'ai simplifié par rapport au message initiale pour eviter une trop grande profondeur dans la hierarchie des vues)
MainWindow.XIB :
- 1 Object controller avec la classe MainWindowController.m
- 1 Object custom view avec une SplitView (avec un IBOutlet dans le MainWindowController.m )
- 1 Object application
- 1 Object FirstReponder
SourceView.XIB :
- 1 Object controller avec la classe SourceViewController.m
- 1 Object custom view avec une NSTable (avec le delegate pour gerer la table et reagir au click sur une ligne)
- 1 Object application
- 1 Object FirstReponder
ContentView.XIB :
- 1 Object controller avec la classe ContentViewController.m
- 1 Object custom view avec un TextField (avec IBOutlet dans le ContentViewController.m )
- 1 Object application
- 1 Object FirstReponder
Dans le MainWindowController.m au awakeFromNib :
- je charge le SourceView.XIB et je place sa vue dans la vue de gauche du Splitview
- je charge le ContentView.XIB et je place sa vue dans la vue de droite du Splitview
Jusque là tout va bien et j'arrive a lancer l'application avec les vues qui s'affichent correctement et la table qui est gérée (click sur une ligne). En revanche je n'arrive toujours pas à aller changer le contenu de la TextField du ContentView depuis un evenement dans ma sourceView.
J'ai essayé de rajouter un object avec la classe ContentViewController.m dans le SourceView.XIB.
J'arrive alors à relier un IBOutlet dans le SourceView vers la vue de l'object ContentViewController.m
Mais je ne parvient toujours pas à avoir un IBOulet vers le TextField depuis ma SourceView ou à y acceder par programmation.
- 1 Object controller avec la classe MainWindowController.m ajouté au nib
- 1 Object custom view avec une SplitView (avec un IBOutlet dans le MainWindowController.m )
- 1 Object application
- 1 Object FirstReponder
+le file's owner à laisser en l'état
SourceView.XIB :
- 1 Object controller avec la classe SourceViewController.m =le File's Owner
- 1 Object custom view avec une NSTable (avec le delegate pour gerer la table et reagir au click sur une ligne)
- 1 Object application
- 1 Object FirstReponder
Ne pas oublier de connecter
ContentView.XIB :
- 1 Object controller avec la classe ContentViewController.m =le File's Owner
- 1 Object custom view avec un TextField (avec IBOutlet dans le ContentViewController.m )
- 1 Object application
- 1 Object FirstReponder
Ne pas oublier de connecter
Dans le MainWindowController.m au awakeFromNib :
- je charge le SourceView.XIB et je place sa vue dans la vue de gauche du Splitview
là tu crées sans doute une instance de SourceViewController, et tu lui attribues une référence sur le mainViewController, ou sur le contentViewController
- je charge le ContentView.XIB et je place sa vue dans la vue de droite du Splitview
idem
En revanche je n'arrive toujours pas à aller changer le contenu de la TextField du ContentView depuis un evenement dans ma sourceView.
Utiliser les connexions entre les contrôleurs
Je ne comprends pas ce que tu entends par "Ne pas oublier de connecter "
J'ai ça :
Le File's Owner est un NSObject. L'autre object est de une instance de "MainWindowController.m"
J'arrive toujours pas à voir comment je peux connecter mon outlet à ma webView (remplace le textField precedent).