I have a nib file I’m trying to instantiate in code. My UIViewController’s main view is also loaded from a nib file.
Here’s my UIViewController’s viewDidLoad method:
- (void)viewDidLoad
{
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"MyCustomView" bundle:nil];
NSArray *nibViews = [nib instantiateWithOwner:self options:nil];
MyCustomView *myView = [nibViews objectAtIndex:0];
myView.frame = CGRectMake(100.0f, 100.0f, 91.0f, 91.0f);
[self.view addSubview:myView];
}
This creates some sort of endless loop. If I comment out [self.view addSubview:myView], myView appears, but everything currently on the screen disappears. I didn’t think instantiateWithOwner added the view to the screen. If it does, how do I get access to it?
Thanks for your help.
The
instantiateWithOwnermethod reassigns the properties of your view controller (set from the nib the controller was created from) to ones from the new nib. Those properties likely include theviewproperty, so that method, within it, contains a call tosetView:, and sets the view controller’s view to the new nib’s view. Afterwards, you’re trying to add a view as a subview to itself, and that, naturally, causes problems.You want to create your own property, for instance,
secondaryView, set the nib’s view to that, and add it as a subview. You don’t want to reassign your view controller’s view.