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