2010-10-07 6 views
5

Dites que j'ai créé un XIB pour une vue d'icône. Je souhaite ensuite incorporer un certain nombre d'instances de cette vue d'icônes dans une vue différente du conteneur XIBpar référence, donc si j'altère les propriétés/ma disposition dans l'affichage d'icônes d'origine XIB, les instances dans la vue conteneur XIB reflètent ces changements .Imbrication de XIB dans Interface Builder/incorporation par référence

Essentiellement, intégration par référence. Peut-être que je suis dense, mais il semble que le comportement par défaut d'Interface Builder lors du glissement d'une vue dans une vue conteneur est de tout copier, plutôt que de référencer le XIB d'origine? Et en faisant glisser une instance de la classe associée à la vue d'icône dans la vue de conteneur résulte simplement une vue vide.

Je suis sûr qu'il y a un moyen de le faire, mais je suis damné si je peux le comprendre. J'évite normalement IB comme la peste;)

Répondre

5

Il n'y a pas moyen de le faire directement dans Interface Builder. Je devais faire quelque chose de similaire à cela dans ma dernière application. Ce que j'ai fini par faire était juste de placer un espace réservé View à l'endroit où vous voulez votre xib référencé et puis dans votre viewDidLoad ou viewWillAppear, etc, vous chargez ce xib et placez cette vue chargée en tant qu'enfant de votre vue d'espace réservé. Alternativement, vous pouvez créer un IBOutlet dans votre contrôleur de vue pour maintenir la vue référencée et connecter cette sortie dans IB. Si vous le faites, vous n'aurez pas besoin de retirer la vue du NSArray.

0

Voici comment je l'ai fait:

Notez que maintenant iOs 5 qu'ils ont déjà containerView. Pour tout ce que je sais, il n'apparaît pas dans XIB. Cependant, l'essence est la même.

Créez une vue et appelez ContainerView. Si vous le faites dans le style XIB, vous devez définir des éléments manuellement comme alloc] init le contrôleur enfant View, en l'ajoutant au parent et en ajoutant la vue à la vue du parent.

Si vous le faites dans le storyboard, vous pouvez lier à partir de ce ContainerView vers un autre contrôleur et créer un segment intégré. Cependant, cela ne fonctionne que pour un contrôleur de vue et vous avez besoin de la même chose pour le reste.

Puis-je faire cela:

- (void)viewDidLoad 
{ 

    [super viewDidLoad]; 

    PO(self.childViewControllers); 
    BGCRListBusinessViewController * theListController= [[BGCRListBusinessViewController alloc]init]; 
    self.listBusinessViewController = theListController; 
    [self addChildViewController:theListController]; 
... 
    for (UIViewController * child in self.childViewControllers) { 
     child.view.frame=self.ContainerView.bounds; 

    } 
    //PO(self.ChangeFilter.BackgroundImage); 
    //PO 
    //self.ChangeFilter setBackgroundImage:[UIImage imageNamed:@] forState:<#(UIControlState)#> 

    [self.ContainerView addSubview:self.listBusinessViewController.view];// initialize' 
} 

Tada ....

Maintenant, regardez cette collection childViewControllers. Celui-là est nouveau dans IOS5. Tout ce qu'il fait, est de passer viewWillAppear, viewWillDisappear, ViewDidThisandThat, et ViewIamRotatingWillOrDidorWhatever. Ça fait un peu plus que ça, mais ça m'est égal. Par conséquent, si vous visez l'IOS4, vous pouvez simplement appeler tous ceux directement dans les vues parentes, respectivementWillAppear, viewWillDisappear, ViewDidThisandThat et ViewIamRotatingWillOrDidorWhatever.

Dans ma mise en œuvre, j'ai un pointeur vers quel viewController a la vue dans ContainerView. De telles vues obtiendront toutes ces fonctions de ViewWillorDidWhatever appelées.

Mon contrôleur parent a également plusieurs enfants. La plupart d'entre eux ne sont pas vus. Aucun problème. Les enfants qui ne sont pas visibles ne verront pas ViewWillorDidWhatever.

Ceci est fait automatiquement par les contrôleurs childViewControllers. Si vous visez l'IOS4, regardez à travers tous vos enfants voir la vue des contrôleurs et voir si l'un d'entre eux est affiché. Si affiché, appelez leur ViewWillorDidWhatever.

Il existe également un délégué supplémentaire qui notifie si un enfant est ajouté à un parent ou autre. Je n'ai pas utilisé ça et je ne sais pas à quoi ça sert.

Enfin, certaines vues peuvent vouloir être ignorées. Les parents devraient le faire. J'accomplis cela avec notification. Mais c'est déjà au-delà de la question. IOS a déjà une telle fonction pour modalViewController.

Questions connexes