Chr*_*ris 5 storyboard nib ios
为了在我的应用程序中重复使用某个子视图(基于故事板),我决定将子视图构建为nib,然后加载它.为此,我做了以下操作:
我有一个UIView子类,我们可以调用Widget.我创建了一个相应的xib文件,将File owner属性设置为我的新子类,连接IBOutlets.
然后,在我的故事板中,我在视图控制器内部有一个uiview,我将它的类设置为我创建的Widget类.
在widget类中,我重写initWithCoder,并在那里加载nib,如下所示:
-(id)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"Widget" owner:self options:nil] objectAtIndex:0]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
应用程序此时会崩溃,并在此处设置断点显示initWithCoder被一遍又一遍地调用.
在这种情况下,我似乎混合了两种使用笔尖的方法,但我不清楚我哪里出错了.如果需要,我可以抛出堆栈跟踪,但它基本上是对同一函数的无限嵌套调用.
And*_*Ley 18
您是否碰巧将.xib文件中View的"自定义类"设置为"Widget"?
这可以解释你所看到的行为,因为initWithCoder:是从xib加载的所有东西的初始化器:
initWithCoder:调用Widget的方法,并尝试加载Widget xibUIView带有Custom Class"Widget",因此,Widget对象正在初始化
initWithCoder:,等等.如果确实如此,您只需要在Widget的xib中删除UIView的"Custom Class"条目.
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |