我有一个带有某些 Controller 和一些 View 的UIViewController。这些 View 中的两个(网格单元)是其他 Nib 。我有从网格单元到文件所有者的导出,但它们不会自动加载。

因此,我尝试覆盖GridCell.minitWithCoder
这将启动无限循环。

我知道可以重写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;
}

10-08 17:48