zoukankan      html  css  js  c++  java
  • 添加自定义UITableView头部控件方法

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

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

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

    类方法实现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
    {
       }
     
     
  • 相关阅读:
    CentOS7安装node环境
    【异常】update更新java.sql.SQLException: Duplicate entry '2019-07-30 00:00:00-110100' for key
    MySQL查询多行重复数据SQL
    Phoenix批量提交优化,官网的demo
    (转) 读懂IL
    Docker
    Docker
    Rest之路
    (转)Docker
    Docker
  • 原文地址:https://www.cnblogs.com/mkai/p/5481235.html
Copyright © 2011-2022 走看看