与另一个 UIView 共享笔尖时如何初始化 UIView 子类

How to init a UIView subclass when sharing a nib with another UIView

我有 2 个使用相同笔尖的 UIView:

PictureCellLabelCell 都继承自 ParentCell。这两个都使用笔尖 picturecell.xib 因为它们的布局非常相似。

PictureCellLabelCell 都覆盖了 ParentCell 中名为 setImage 的方法。

目前 picturecell.xib 的所有者设置为 PictureCell

我通过 [[NSBundle mainBundle] loadNibNamed:@"picturecell" owner:self options:nil][0];

实例化 PictureCell

我将如何实例化 LabelCell

我会为每个单元格制作单独的 xibs,并使用 registerNib:forIdentifier: 而不是像以前那样加载它们。您可以将单元格复制并粘贴到新的 xib 中,这样您就不必重新制作它了。

编辑后:

我确实找到了一种方法,可以在两个单元格子classes 之间共享在 xib 中制作的公共 UI。与其制作一个作为单元格的 xib,不如制作一个 UIView。将所有常用子视图添加到其中,并使文件所有者成为基本单元格 class,这样您就可以连接您在该 class 中创建的任何出口。在base cell的init方法中,可以添加这个view作为contentView的子view("content"是在base cell的.h中创建的属性)。

@implementation RDBaseCell

-(instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

        _content = [[NSBundle mainBundle] loadNibNamed:@"CellContent" owner:self options:nil][0];
        [self.contentView addSubview:_content];
    }
    return self;
}

-(void)layoutSubviews {
    [super layoutSubviews];
    self.content.frame = self.contentView.bounds;
}

在 table 视图控制器中,为您的两个子 class 注册 class。在 subclasses 的 init 方法中,您可以添加特定于该 subclass 的任何自定义视图。