自定义UITableView每组头部控件

33 篇文章 0 订阅
9 篇文章 0 订阅

1.创建一个继承UITableViewHeaderFooterView的类,拥有一个模型

2.重写initWithStyle:reuseIdentifier:方法
添加所有需要显示的子控件(不需要设置子控件的数据和frame, 子控件要添加到contentView中)
进行子控件一次性的属性设置(有些属性只需要设置一次, 比如字体\固定的图片)

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
 if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
 //在这里向contentView添加控件
   }
    return self;
}

3.重写类方法实现LRHeaderFooterView的循环使用

+ (instancetype)heardFooterViewWithTableView:(UITableView *)tableView
{
    NSString *ID = @"heardView";
    LRHeaderFooterView *heardView = [tableView dequeueReusableCellWithIdentifier:ID];
    if (heardView == nil) {
        heardView = [[LRHeaderFooterView alloc] initWithReuseIdentifier:ID];
    }
    return heardView;
}

4.重写模型的setter方法,用来显示数据特别注意这里不能设置内部控件的frame值,因为此时的头部控件没有宽高,同时我们应该将头部控件的状态覆盖掉,应为头部控件是循环利用的

- (void)setGroup:(LRFriendGroup *)group
{
    _group = group;
    [self.btnView setTitle:group.name forState:UIControlStateNormal];
    self.labelView.text = [NSString stringWithFormat:@"%d/%ld",group.online,group.friends.count];
    //覆盖头部控件的状态
}

5.在layoutSubviews设置内部控件的frame值
这个方法是布局内部控件 当一个控件的frame值改变时就会调用这个方法

- (void)layoutSubviews
{
#warning 一定要记得写 不然添加的button不能处理点击事件
    [super layoutSubviews];
    self.btnView.frame = self.bounds;
//    self.labelView.frame =
    CGFloat labelH = self.bounds.size.height;
    CGFloat labelW = 80;
    CGFloat labelY = 0;
    CGFloat labelX = self.bounds.size.width - labelW - 10;
    self.labelView.frame = CGRectMake(labelX, labelY, labelW, labelH);
}

6.在控制器中实现以下方法

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

    LRHeaderFooterView *heardView = [LRHeaderFooterView heardFooterViewWithTableView:tableView];
    heardView.delegate = self;
    heardView.group = self.groups[section];
    return heardView;

}

当我们刷新表格后会重新创建新的头部控件,那么我们需要改变头部控件需要调用一下方法

// 当一个控件已经被添加到父控件中就会调用该方法
- (void)didMoveToSuperview
{
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值