I have created custom UIView with a xib.
In addition I have a UIViewController in my storyboard, to which I have added a UIView and set its class to be my custom UIView.
But when I am running the app, the view doesn't have its subviews. When I debug, all the subviews are null.
In .m of the custom UIView, these init methods are present:
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { } return self; } What am I missing?
mainBundle(). loadNibNamed("SomeObject", owner: self, options: nil) self. addSubview(self. view); // adding the top level view to the view hierarchy } required init(coder aDecoder: NSCoder) { super.
As you already know, with a UIViewController we have the -initWithNibName:bundle: method to connect it with an xib.
But...
When it comes to a UIView, you need to use -loadNibNamed:owner:options: and load it with the xib. (simply specifying a custom class to the view in the xib won't work)
UIView subclass called CustomXIBView UIView)CustomXIBView CustomXIBView's nibView (left toolbar)Show Identity Inspector (3rd option in the panel on the right)CustomXIBView as the Custom Class of the View CustomXIBView's File's Owner in the nibCustomXIBView.h //To load `CustomXIBView` from any `UIViewController` or other class: //instead of the following commented code, do the uncommented code //CustomXIBView *myCustomXIBViewObj = [CustomXIBView alloc] init]; //[myCustomXIBViewObj setFrame:CGRectMake(0,0,320,480)]; //Do this: CustomXIBView *myCustomXIBViewObj = [[[NSBundle mainBundle] loadNibNamed:@"someView" owner:self options:nil] objectAtIndex:0]; [myCustomXIBViewObj setFrame:CGRect(0, 0, myCustomXIBViewObj.frame.size.width, myCustomXIBViewObj.frame.size.height)]; [self.view addSubview:myCustomXIBViewObj]; ref: http://eppz.eu/blog/uiview-from-xib/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With