我有一个基于UIView
的类,它有自己的XIB。让我们称这个班为MyClass
。我有MyClass.xib
,MyClass.h
和MyClass.m
。
我在故事板上有一个UIView对象,我将该对象的类设置为MyClass
。
我创建了一个新的UIView
XIB,在XIB中,我将文件所有者的类更改为MyClass
。我不知道是否必须在XIB内部建立更多连接。
我想要的是:故事板加载MyClass.m
并加载MyClass.xib
,因此我有这个初始化代码:
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
NSString *className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
[self addSubview:self.view];
return self;
}
return nil;
}
问题是此代码进入无限循环。我想loadNibNamed
再次呼叫initWithCoder:
,应用程序崩溃。
我该怎么做?为什么循环并且是否还有必须在xib内部建立连接?
答案 0 :(得分:1)
让我们这样做
以awakeFromNib
方法启动它,例如
MyClass.m
答案 1 :(得分:0)
使用self.subviews.count == 0
打破循环,如下所示:
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self && self.subviews.count == 0) {
NSString *className = NSStringFromClass([self class]);
self.view = [[[NSBundle mainBundle] loadNibNamed:className owner:self options:nil] firstObject];
[self addSubview:self.view];
}
return self;
}
答案 2 :(得分:0)
我已经尝试了所有答案,但这是唯一有效的代码,经过多次试验:
ThemeResource