Nesting Custom Classes/XIB's with Interface Builder
interface-builder, iphone, iphone-sdk-3.0, objective-c, uikit
Solution
Here's how I managed to make this work:
In Interface Builder Open your outer nib and do this:
- Add a UIView to define the space where you want your inner nib to display.
- Add a UIViewController object from the library, set its Nib Name property to the name of your inner nib file (without the extension).
- Create IBOutlets for these two items in your outer view controller and wire them up. (I'll refer to them as innerView and innerViewController.)
- Do not connect any of the IBOutlets defined in your inner view controller to anything in your outer nib file, just leave them unconnected.
In Xcode In your outer view controller's viewDidLoad method, add these two lines:
[self.innerView addSubview:self.innerViewController.view];
self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height);
If your outer nib is a custom UITableViewCell, put those lines in your awakeFromNib method instead.
Build & Run!
Problem
I'll try to make this as short as I can. I wrote a custom class that extends UIView with a couple of IBOutlet properties, and it has a XIB associated with it where those IBOutlets are linked to. I then want to take that class, embed it in some other XIB (for example, a table cell), and just have it work. It seems that when I embed that custom class in the new XIB, it does not recognize the original XIB I associated with it, so it asks for me to reset the IBOutlets to interface elements on the new XIB. This is lame. Does anyone understand what I am trying to do and have a good approach?