我有一个带有某些 Controller 和一些 View 的UIViewController
。这些 View 中的两个(网格单元)是其他 Nib 。我有从网格单元到文件所有者的导出,但它们不会自动加载。
因此,我尝试覆盖GridCell.m
的initWithCoder
。
这将启动无限循环。
我知道可以重写initWithFrame
并从代码中添加 subview ,但这不是我想要的。我希望能够在Interface Builder中移动 View ,并让Xcode用正确的框架初始化 View 。
我该如何实现这一目标?
编辑1
我试图在亚历山大的帮助下使其正常工作。这就是我现在设置的方式:
MainView的UIView的Custom类设置为GridCell。它在MainView/File的所有者中有一个导出。
从GridCell.m中删除了所有初始化代码,并为我的自定义类设置了导出
MainView仍然不显示GridCell。没有错误,只有红色开关应该位于的寂寞空白空间。我究竟做错了什么?
我非常接近以编程方式执行此操作。我很想学习如何用 Nib 。
最佳答案
加载 Nib 会导致再次调用initWithCoder,因此仅在子类当前没有任何 subview 的情况下才这样做。
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
if (self.subviews.count == 0) {
UINib *nib = [UINib nibWithNibName:NSStringFromClass([self class]) bundle:nil];
UIView *subview = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
subview.frame = self.bounds;
[self addSubview:subview];
}
}
return self;
}