[英]Showing a content of a UIView loaded from a xib in a storyboard
当前设置
我有一个UIView
的子类,它从xib文件加载内容 - 称之为XibOwnerClass
。 此外,在其他类中,有一个名为Triangle
类,它可以帮助我创建带或不带边框的三角形,具有不同的笔触或填充颜色等。该类可以在故事板中设计,并且其一些属性被定义为IBInspectable
。
目前,在我的xib
文件中,我使用此三角视图并通过IB
设置其可检查属性。 这真的很酷很方便......所以如果我看一下xib
,我会在其他视图中看到三角形视图。
所以,让我们走得更远。 为了使用这个XibOwnerClass
,我将UIView
元素拖到故事板上,并将其自定义类更改为XibOwnerClass
,因此我获得了特定于XibOwnerClass
设计属性。 所以,我可以在IB
设置所有内容,当我运行应用程序时,一切正常。
问题
即使这有效,我想知道是否有办法,在故事板上拖动多个视图(类XibOwnerClass
),并且能够通过Interface Builder单独配置所有这些视图?
目前,当我拖动UIView
并将其自定义类更改为XibOwnerClass
我什么也看不见。 我的意思是,视图在那里,并且它具有标准属性+可检查属性。 但是我在这个新视图xib
不到xib
中定义的三角形。 有没有办法做到这一点?
我知道xib
在我的情况下被重用(并且它意味着像这样使用),所以如果我在xib
更改某些内容,那么xib
加载的所有视图都会受到影响。 但是有多种方法可以从同一个xib
加载多个视图,但加载后,要查看它们并单独设置它们?
这是我从xib
加载的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;
}
然后在awakeFromNib:
我使用可检查属性的值...
编辑:
另外我没有initWithFrame:
实现,但我认为如果从nib加载则不需要它(因为它没有被执行)。 但也许在设计时需要这个?
当你不共享类代码时,不能说出错了什么。 但我猜你没有使用prepareForInterfaceBuilder。 在您的XibOwnerClass中覆盖prepareForInterfaceBuilder并调用其中的视图设置,例如更改背景颜色等。
override func prepareForInterfaceBuilder() {
//prepare setups or things to show in storyboard
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.