2010-06-13 4 views
0

Je construis un UINavigationController personnalisé (Ne le sous-classe pas, je sous-classe UIViewController pour cela), je voudrais avoir les instances de UIViewController qui sont ajoutées à mon custom navigationController pour obtenir une référence au contrôleur de navigation personnalisé quand elles accèdent .navigationController. I.e.Modification de la valeur self.navigationController de UIViewControllers?

que vous, d'un UIViewController qui appartiennent à un UINavigationController, faire pousser un nouveau contrôleur de vue de la pile:

MyViewController *myVC = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:myVC animated:YES]; 
[myVC release]; 

je voudrais imiter ce comportement. De préférence par un motif de conception qui n'implique pas l'ajout de code au UIViewController lui-même. Ainsi, dans le cas ci-dessus, lorsque le contrôleur de navigation personnalisé est poussé vers un contrôleur, la commande pushViewController règle le contrôle navigationController sur le contrôleur personnalisé (lui-même), de sorte que le contrôleur de vue nouvellement ajouté .navigationController obtiendra également une référence au contrôleur de nav personnalisé.

Il y a quelques pièges impliqués. Même si viewController ajouté est affiché par le contrôleur de navigation personnalisé, le [self parentViewController] ne fonctionne pas lors du sous-classement UIViewController. Si elle l'a fait, je pouvais aller

[[self parentViewController] pushViewController...

à partir de mon ajoutée UIViewController.

Le self.navigationController est en lecture seule, donc je ne peux pas le configurer manuellement et même si je le pouvais, je devrais le mettre à [self parentViewController] que je ne peux pas obtenir.

J'avais prévu de construire une catégorie sur le UIViewController (mon projet n'utilisera que le custom navigationController, donc pas de risque de collision). Mais son approche se heurte au problème mentionné ci-dessus, je n'ai aucun moyen d'obtenir une référence au Custom UINavigationController possédant le UIViewController poussé, à partir de ces contrôleurs ajoutés. Je devrais construire des protocoles et définir le CustomNavigationController en tant que délégué sur chacun des UIViewControllers, en le couplant ainsi fortement et en faisant que ces UIViewControllers fonctionnent seulement avec mon contrôleur de Nav personnalisé.

J'espère que ce que j'essaie de réaliser est clair, j'ai besoin de plus d'expérience en conception de modèle dans l'objectif C pour voir celui-ci par moi-même.

Merci pour toute aide/conseillent donné :)

Répondre

0

Je ne sais pas si vous compris cela, mais je suis aux prises le même problème je pense. Par exemple. une application split-view iPad par défaut a un RootViewController (pour le popup) et un DetailViewController qui a la vue sous le popup ou la vue sur la droite quand l'iPad est incliné (paysage). Je veux sélectionner à partir de la fenêtre contextuelle et piloter les contrôleurs individuels qui peuplent la vue détaillée en fonction de la sélection de RootViewController. Je ne l'ai pas encore compris. Si vous avez un aperçu, veuillez poster. Je ferai la même chose si je tombe sur de grands projets ici.

Questions connexes