ios – 显示从故事板中的xib加载的UIView的内容

当前设置

我有一个UIView的子类,它从xib文件加载内容 – 称之为XibOwnerClass.此外,在其他类中,有一个名为Triangle的类,它可以帮助我创建带或不带边框的三角形,具有不同的笔触或填充颜色等.该类可以在故事板中设计,并且其一些属性被定义为IBInspectable.

目前,在我的xib文件中,我使用此三角视图并通过IB设置其可检查属性.这真的很酷很方便……所以如果我看一下xib,我会在其他视图中看到三角形视图.

所以,让我们走得更远.为了使用这个XibOwnerClass,我将UIView元素拖到故事板上,并将其自定义类更改为XibOwnerClass,因此我获得了特定于XibOwnerClass的可设计属性.所以,我可以在IB中设置所有内容,当我运行应用程序时,一切正常.

问题

即使这有效,我想知道是否有办法,在故事板上拖动多个视图(类XibOwnerClass),并且能够通过Interface Builder单独配置所有这些视图?

目前,当我拖动UIView并将其自定义类更改为XibOwnerClass时,我什么也看不见.我的意思是,视图在那里,并且它具有可检测属性的标准属性.但是我在这个新视图中看不到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

}
点赞