与另一个 UIView 共享笔尖时如何初始化 UIView 子类
How to init a UIView subclass when sharing a nib with another UIView
我有 2 个使用相同笔尖的 UIView:
PictureCell
和 LabelCell
都继承自 ParentCell
。这两个都使用笔尖 picturecell.xib
因为它们的布局非常相似。
PictureCell
和 LabelCell
都覆盖了 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 的任何自定义视图。
我有 2 个使用相同笔尖的 UIView:
PictureCell
和 LabelCell
都继承自 ParentCell
。这两个都使用笔尖 picturecell.xib
因为它们的布局非常相似。
PictureCell
和 LabelCell
都覆盖了 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 的任何自定义视图。