Navigation Controller et View
Ceetix
Membre
Salut tout le monde,
Je me penche un peu sur le dev Mac OS et j'ai implémenté un système de navigation controller pour mes besoins.
Donc en gros j'ai :
et
ensuite par exemple dans mon AppDelegate je commence par :
Ca marche bien j'arrive ensuite à naviguer et tout MAIS sur ma première vue j'ai ma vue designé dans mon nib qui apparait deux fois et je pige pas pourquoi ...
Si je commente :
Ca marche j'ai bien la vue qui s'affiche sans doublons mais par contre le système de navigation est cassé vu que c'est une vue n'appartenant apparemment pas à mon controlleur.
Si dans mon AppDelegate j'ajoute à la fin :
J'ai bien le contenu de ma vue puis un NSView qui contient exactement les même éléments de la vue.
Je loupe surement un truc mais ... lequel ?
Je joins un screen pour vous faire une idée.
Je me penche un peu sur le dev Mac OS et j'ai implémenté un système de navigation controller pour mes besoins.
Donc en gros j'ai :
@interface NXNavigationController : NSViewController<br />
<br />
@property (nonatomic, retain) NXViewController *visibleViewController;<br />
@property (nonatomic, retain) NSMutableArray *viewControllers;<br />
<br />
- (id)initWithRootViewController:(NXViewController *)rootViewController andWindowFrame:(NSRect)frame;<br />
et
- (id)initWithRootViewController:(NXViewController *)rootViewController andWindowFrame:(NSRect)frame<br />
{<br />
self = [super initWithNibName:nil bundle:nil];<br />
if(self)<br />
{<br />
if(rootViewController)<br />
{ <br />
_viewControllers = [[NSMutableArray alloc] initWithObjects:rootViewController, nil];<br />
[rootViewController setNavigationController:self];<br />
<br />
self.visibleViewController = rootViewController;<br />
[self.view addSubview:rootViewController.view];<br />
}<br />
}<br />
return self;<br />
}<br />
ensuite par exemple dans mon AppDelegate je commence par :
HomeViewController *rootController = [[[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil] autorelease];<br />
_navigationController = [[NXNavigationController alloc] initWithRootViewController:rootController andWindowFrame:NSZeroRect];<br />
[self.window setContentView:_navigationController.view];<br />
Ca marche bien j'arrive ensuite à naviguer et tout MAIS sur ma première vue j'ai ma vue designé dans mon nib qui apparait deux fois et je pige pas pourquoi ...
Si je commente :
[self.view addSubview:rootViewController.view];<br />
Ca marche j'ai bien la vue qui s'affiche sans doublons mais par contre le système de navigation est cassé vu que c'est une vue n'appartenant apparemment pas à mon controlleur.
Si dans mon AppDelegate j'ajoute à la fin :
for(NSView *view in [_navigationController.view subviews])<br />
{<br />
NSLog(@"%@",view);<br />
if([view isKindOfClass:[NSView class]])<br />
{<br />
for(NSView *sview in [view subviews])<br />
NSLog(@"%@",sview);<br />
}<br />
}<br />
J'ai bien le contenu de ma vue puis un NSView qui contient exactement les même éléments de la vue.
Je loupe surement un truc mais ... lequel ?
Je joins un screen pour vous faire une idée.
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
T'aurais pas un truc dans NXViewController qui entrerait en conflit ?
(P.S. La notion de visibleViewController est inutile. C'est forcément le dernier élément de viewControllers).
et
P.S oui il faut le setter quand on a plus d'un controlleur.
EDIT : en fait non c'est foireux
Je suis pas fou, c'est le seul endroit dans mon code où j'instancie ma classe HomeViewController ...
Sinon j'ai toujours pas résolu mon soucis mais je ne désespère pas lol
Mais a priori, un Navigation Controller est un View Controller, donc l'héritage a du sens. Alors qu'un protocole non, puisqu'il va falloir fournir une bonne partie de l'implémentation. D'ailleurs, il rarissime de sous-classer UINavigationController.
C'est vraiment tout ce que j'utilise pour le moment. Dans mon AppDelegate j'instancie de la même manière que iOS (sauf que NSWindow n'a pas de propriété rootViewController).
ça ne me paraà®t pas évident si le view controller n'utilise pas de nib.