自定义cell
步骤:
- 创建TableViewCell的子类
- 重写初始化方法
- 要添加的控件添加到到cell的现实内容区域contentView上面
- 把系统的cell 替换成自定义cell 完成
创建MyTableViewCell类
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self addSubViews];
}
return self;
}
- (void)addSubViews{
self.imageV = [[UIImageView alloc] initWithFrame:CGRectMake(kMargin, kMargin, kImageWidth, kImageHeight)];
self.imageV.backgroundColor = [UIColor redColor];
[self.contentView addSubview:self.imageV];
[_imageV release];
self.nameLable = [[UILabel alloc] initWithFrame:CGRectMake(self.imageV.XWidth + kMargin, self.imageV.Y - 2.5, kScreenWidth - self.imageV.XWidth - 2 * kMargin, kImageHeight / 3 )];
self.nameLable.backgroundColor = [UIColor cyanColor];
[self.contentView addSubview:self.nameLable];
self.phoneLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.nameLable.X, self.nameLable.YHeight + 5, kScreenWidth - self.imageV.XWidth - 2 * kMargin, kImageHeight / 3 )];
self.phoneLabel.backgroundColor = [UIColor cyanColor];
[self.contentView addSubview:self.phoneLabel];
self.genderLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.phoneLabel.X, self.phoneLabel.YHeight + 5, kScreenWidth - self.imageV.XWidth - 2 *kMargin, kImageHeight / 3 )];
self.genderLabel.backgroundColor = [UIColor cyanColor];
[self.contentView addSubview:self.genderLabel];
}
封装以model类传值
在model类自定义的cell类中声明一个model类属性
@property (nonatomic, retain) Student *stuModel;
- (void)setStuModel:(Student *)stuModel;
重写model属性的set方法
// 重写model的set方法 使赋值model的同时也给控件赋值
- (void)setStuModel:(Student *)stuModel{
if (_stuModel != stuModel) {
[_stuModel release]
_stuModel = [stuModel retain]
}
self.nameLable.text = stuModel.name
self.phoneLabel.text = stuModel.gender
self.genderLabel.text = stuModel.phoneNumber
self.imageV.image = [UIImage imageNamed:@"拔刀斋.jpg"]
}
返回cell
static NSString *identifier = @"MaleCell";
MaleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[MaleTableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:identifier] autorelease];
}
Student *stu = self.dataArray[indexPath.row];
cell.stuModel = stu;
return cell;
}
返回不同的cell
再创建一个自定义cell类
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self addSubviews];
}
return self;
}
- (void)addSubviews{
self.nameLable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / 4, 40)];
self.nameLable.backgroundColor = [UIColor redColor];
[self.contentView addSubview:self.nameLable];
[_nameLable release];
}
- (void)setStuModel:(Student *)stuModel{
if (_stuModel != stuModel) {
[_stuModel release];
_stuModel = [stuModel retain];
}
self.nameLable.text = stuModel.name;
}
根据条件返回不同的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
Student *stu = self.dataArray[indexPath.row];
if ([stu.gender isEqualToString:@"女"]) {
static NSString *identifier = @"GirlCell";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[MyTableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:identifier] autorelease];
}
cell.stuModel = stu;
return cell;
}else{
static NSString *identifier = @"MaleCell";
MaleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[MaleTableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:identifier] autorelease];
}
cell.stuModel = stu;
return cell;
}
}