Ios 在故事板中显示从xib加载的UIView的内容
当前设置 我有一个Ios 在故事板中显示从xib加载的UIView的内容,ios,objective-c,xcode,uiview,interface-builder,Ios,Objective C,Xcode,Uiview,Interface Builder,当前设置 我有一个UIView的子类,它从一个xib文件加载一个内容,称之为XibOwnerClass。此外,在其他类中,还有一个名为Triangle的类,它可以帮助我创建带边框或不带边框、具有不同笔划或填充颜色等的三角形。该类在故事板中是可设计的,并且它的一些属性定义为IBInspectable 目前,在我的xib文件中,我使用这个三角形视图,并通过IB设置其可检查属性。这真的很酷很方便。。。因此,如果我查看xib,我将在其他视图中看到三角形视图 所以,让我们更进一步。为了使用这个XibOwn
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加载,则不需要它(因为它没有执行)。但是,在设计时可能需要这样做?当您不共享类代码时,无法真正说明出了什么问题。但我猜您没有使用PrepareForPrinterFaceBuilder。在XibOwnerClass中,覆盖PrepareForPrinterFaceBuilder并调用其中的视图设置,例如更改背景颜色等
override func prepareForInterfaceBuilder() {
//prepare setups or things to show in storyboard
}
好的,我已经解决了。事实证明,我不应该使用主Bundle,而应该使用该类的Bundle,如前面所述 下面是代码:
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
@Mohammadalijf的答案大体上是正确的。这不是解决我问题的直接办法。但后来,当我修复bundle这个东西时,我像他说的那样使用prepareForInterfaceBuilder,并在那个里初始化东西,以便在设计时一切都可用
还可以找到一些与所有这些相关的有用信息。我将用一些代码更新我的问题。而且,在我的例子中,这个方法从未执行过(我已经设置了一个断点)。请注意,我在IB中看到了XibOwnerClass的可检查属性。我只是在实际的xib中看不到任何内容。啊,这个方法只在设计时调用,而不是在构建时调用。无论如何,我看不出有什么不同。目前,我什么也看不到。这就像我添加了普通视图+可检查属性(在属性检查器中)。看不到任何内容。它现在起作用了,我也做了回答。谢谢你的回答。你得到了我的支持票,因为这当然是解决我问题的一个缺失部分。