Current Setup
I have a subclass of a UIView
that loads a content from a xib file - call it a XibOwnerClass
. Also, among other classes, there is a class called Triangle
which helps me to create triangles with or without a border, with different stroke or fill color etc. That class is designable in storyboard and some of its properties are defined as IBInspectable
.
Currently, in my xib
file, I use this triangle view and setup its inspectable properties through IB
. And that is really cool and convenient... So if I look into xib
, I will actually see the triangle view among other views.
So, lets go further. In order to use this XibOwnerClass
, I drag the UIView
element to the storyboard, and change its custom class to XibOwnerClass
, so I get my designable properties specific for XibOwnerClass
. So, I can setup all things in IB
and when I run the app, everything works.
The problem
Even if this works, I wonder if there is a way, to have multiple views (of class XibOwnerClass
) dragged on a storyboard, and to be able to configure all of them individually trough Interface Builder?
Currently when I drag the UIView
and change its custom class to XibOwnerClass
I see nothing. I mean, the view is there, and it has its standard properties + inspectable properties. But I can't see triangles defined in xib
in this new view. Is there a way to do this?
I am aware that xib
is reused in my case (and it is meant to be used like that), so if I change something in a xib
, all views that load from it will be affected. But is there a way multiple views to load from the same xib
, but when loaded, to see them & setup them individually?
Here is how I load from xib
:
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
UIView *myView = [[[NSBundle mainBundle] loadNibNamed:@"MyXib" owner:self options:nil] firstObject];
if (myView){
myView.frame = CGRectMake(myView.frame.origin.x, myView.frame.origin.y, self.frame.size.width, self.frame.size.height);
[self addSubview:myView];
//Initialize other stuff
[self commonInit];
}
}
return self;
}
Then in awakeFromNib:
I use the values of inspectable properties...
EDIT:
Also I don't have initWithFrame:
implemented, but I thought that it is not needed if load from nib (because it is not executed). But maybe this is needed while design time ?