如何在与另一个UIView共享一个nib时初始化一个UIView子类

时间:2015-01-26 22:58:42

标签: ios objective-c uiview

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

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

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

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

通过PictureCell

实例化[[NSBundle mainBundle] loadNibNamed:@"picturecell" owner:self options:nil][0];

我如何实例化LabelCell

1 个答案:

答案 0 :(得分:2)

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

编辑后:

我确实找到了一种方法,可以在两个单元子类之间共享xib中的公共UI。而不是制作一个单元格的xib,而不是制作一个UIView。将所有常见子视图添加到其中,并使文件所有者成为基本单元类,以便您可以挂接在该类中创建的任何出口。在基本单元的init方法中,您可以将此视图添加为contentView的子视图(“content”是在基本单元的.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;
}

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