2010-04-07 3 views
11

J'ai deuxComment charger un NIB à l'intérieur d'une vue dans un autre NIB?

de NIB
ParentViewController.xib 
ChildViewController.xib 

ParentViewController.xib contient un UIView et un UIViewController. ChildViewController.xib contient une UIButton

Je veux ChildViewController.xib charger dans UIView

du ParentViewController.xib je l'ai fait ce qui suit:

  1. @property Créé pour UIView dans ParentViewController
  2. Le propriétaire du fichier connecté à UIView dans ParentViewController
  3. Définir UIViewController dans la NIB de ParentViewController Nom de la propriété à ChildViewController dans Interface Builder
  4. Set ChildViewController vue propriété à UIView dans ParentViewController

J'espérais ce chargerait ChildViewController dans mon UIView en ParentViewController mais pas de chance.

J'ai eu l'avertissement suivant, ce qui pourrait être le coupable:

'View Controller (Child View)' has both its 'NIB Name' property set and its 'view' outlet connected. This configuration is not supported. 

J'ai également ajouté un code supplémentaire dans viewDidLoad ParentViewController():

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ChildViewController *childViewController = [[ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil]; 
    childViewController.view = self.myView; 
} 

Toute réflexion sur pourquoi ChildViewController ne charger dans l'UIView de ParentViewController?

Répondre

6

Essayez cette

[self.myview addSubview: childViewController.view]; 

au lieu de

childViewController.view = self.myView; 
+4

Est-il possible de le faire en utilisant l'interface Constructeur ? – wezzy

5

L'alternative est de construire la vue "embarquée" (!) Dans un Nib, dire ChildView.xib, instancier puis dans le ParentViewController.xib (changement la classe dans l'inspecteur d'identité). Il n'est pas nécessaire de programmer [self.view addSubview:embeddedView] dans la méthode -viewDidLoad du contrôleur de vue parent.

J'ai écrit comment nous embed custom-view Nibs inside other Nibs dans un blog longish. Le point de repère surcharge -awakeAfterUsingCoder: dans la classe ChildView, en remplaçant l'objet chargé de la plume «parente» par celui chargé à partir de la plume «enfant».

Notez que nos contrôles personnalisés sous-classe UIView, non UIViewController (voir Apple's docs on Custom view controllers: «Vous ne devriez pas utiliser plusieurs contrôleurs de vue personnalisée pour gérer les différentes parties de la même hiérarchie de vue »)

+0

Eh bien, avez-vous vérifié la partie «Contrôleurs de vue de conteneur d'organiser la partie de contrôleurs d'autres» du lien que vous avez fourni ... à partir de iOS5, vous avez l'option de confinement UIViewController. – tapmonkey

+2

Lien vers votre blog est mort btw. – expert

+1

@ruslan: Fonctionne pour moi ... Quoi qu'il en soit, voici une mise à jour: http: //blog.yangmeyer.de/blog/2012/07/09/an-update-on-nested-nib-loading –

Questions connexes