1.初始化方法(添加子控件)
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
UIImageView *iconImageView = [[UIImageView alloc] init];
[self.contentView addSubview:iconImageView];
self.iconImageView = iconImageView;
UILabel *titleLabel = [[UILabel alloc] init];
[self.contentView addSubview:titleLabel];
self.titleLabel = titleLabel;
}
return self;
}
2.设置子控件的Frame(布局子控件)
- (void)layoutSubviews
{
[super layoutSubviews];
CGFloat margin = 10;
CGFloat contentViewW = self.contentView.frame.size.width;
CGFloat contentViewH = self.contentView.frame.size.height;
CGFloat iconX = margin;
CGFloat iconY = margin;
CGFloat iconW = 80;
CGFloat iconH = contentViewH - 2 * iconY;
self.icon_ImageView.frame = CGRectMake(iconX, iconY, iconW, iconH);
CGFloat titleX = iconX + iconW + margin;
CGFloat titleY = iconY;
CGFloat titleW = contentViewW - titleX - margin;
CGFloat titleH = 20;
self.title_Lable.frame = CGRectMake(titleX, titleY, titleW, titleH);
}
3.设置子控件的内容
// 一般我们会在cell中拥有一个模型数据属性,通过重写属性的setter方法,设置子控件的内容
- (void)setTg:(ZJTg *)tg
{
_tg = tg
self.icon_ImageView.image = [UIImage imageNamed:tg.icon]
self.title_Lable.text = tg.title
}
4.自定义cell的autolayout
- 可以在初始化方法中设定约束,从而设定控件的frame,可以不用重写layoutSubviews方法
// 需导入第三方Masonry框架
// 创建自定义cell添加子控件的方法initWithStyle(note:子控件要添加到contentView上)
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
// 常用的间距
CGFloat margin = 10
CGFloat contentViewW = CGRectGetWidth(self.contentView.frame)
CGFloat contentViewH = CGRectGetHeight(self.contentView.frame)
// 1.创建图片视图控件
UIImageView *icon_ImageView = [[UIImageView alloc] init]
[self.contentView addSubview:icon_ImageView]
self.icon_ImageView = icon_ImageView
// 1.2设置图片控件的约束
[icon_ImageView makeConstraints:^(MASConstraintMaker *make) {
// make.left.equalTo(self.contentView.left).offset(margin)
// make.top.equalTo(self.contentView.top).offset(margin)
//可以简化为如下
make.top.left.equalTo(self.contentView).offset(margin)
make.bottom.equalTo(self.contentView.bottom).offset(-margin)
make.width.equalTo(80)
}]
// 2.创建标题控件
UILabel *title_Lable = [[UILabel alloc] init]
[self.contentView addSubview:title_Lable]
self.title_Lable = title_Lable
// 2.1设置标题控件的约束
[title_Lable makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.icon_ImageView.right).offset(margin)
make.height.equalTo(20)
make.right.equalTo(self.contentView.right).offset(-margin)
make.top.equalTo(self.icon_ImageView.top)
}]
}
return self
}
5.通过Xib或SB创建cell
- viewDidLoad{
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([ZJTgCell class]) bundle:nil] forCellReuseIdentifier:ID];
}