添加自定义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
{  
}
时间: 2024-08-06 17:50:57

添加自定义UITableView头部控件方法的相关文章

WPF查找子控件和父控件方法[转帖]

WPF查找子控件和父控件方法 一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type typename) where T : FrameworkElement { DependencyObject child = null; List<T> childList = new List<T>(); for (int i = 0; i <= V

C#控件方法及属性大全,望补充

C#控件及常用设计整理 1.窗体 常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三种: Normal (窗体正常显示). Minimized (窗体以最小化形式显示)和 Maximized(窗体以最大化形式显示). (3)StartPosition属性:用来获取或设置运行时窗体的起始位置. (4)Text属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的

IE下JS接受ActiveX控件方法

1.常规写法 <SCRIPT type="text/javascript" FOR="activexID" EVENT="onXXXevent()" > // js 处理具体内容. </SCRIPT> 当acitveX控件 onXXXevent()事件被触发时,调用此方法. 2.注意事项 这种方法只是IE下支持,且要注意 <SCRIPT type="text/javascript" FOR=&qu

LISTCTRL控件方法

以下未经说明,listctrl默认view风格为report ------------------------------------------------------------------------------- 1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windows资源管理器,"查看&q

bcb安装控件方法汇总

1.BCB 菜单: Project->Options->Packages->Add[喝小酒的网摘]http://blog.const.net.cn/a/8496.htm如果是BCB6: 选择安装的文件夹 yb_base_c6.bpl 和 yb_comm_c6.bpl, 然后按"打开"按钮如果是BCB5: 选择安装的文件夹 yb_base_c5.bpl 和 yb_comm_c5.bpl, 然后按"打开"按钮2.BCB 菜单: Project->

基于MFC的Media Player播放器的控件方法和属性介绍

|   版权声明:本文为博主原创文章,未经博主允许不得转载. 因为使用第三方多媒体库或是第三方控件(Media Player)辅助播放,我们则必须要了解到Media Player控件的一些属性 和方法.下面我们介绍一些常用的方法和属性. 下面这两张图片是我们导入的控件的类库,我们使用的一些方法和属性全部包含在下面的文件当中. >>.CWMPPlayer4 1 CString GetUrl(); 2 //取得指定位置 3 void SetUrl(LPCTSTR lpszNewValue); 4

gridView 单元格绑定不同控件方法

1.主要代码: private void Form3_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("HZ"); dt.Columns.Add("PY",typeof(object)); dt.Rows.Add(1,1); dt.Rows.Add(2,2); gridControl1.DataSource = dt; } private void g

C# 跨线程操作控件方法封装

Winform程序需要处理耗时操作时,往往需要将耗时操作放入新开的子线程进行处理,在子线程中可能会经常去修改或操作主线程上的控件: 如果直接在子线程中操作控件,会报线程间操作无效等错误,这里提供一个我自己经常使用的跨线程操作方式,代码如下: //跨线程操作控件 //(将数据全部装填完毕后,在一起放到主界面刷新控件:不要一边装填一边刷新主界面控件,这样依然会导致界面卡顿) public void showMsg(string str) { if (textBox.InvokeRequired) {

在WPF的WindowsFormsHost浮动控件方法

WindowsFormsHost是WPF中承载windows form类型的控件,它的优先级特别高,在同一个窗口上的其他类型控件都能被它盖在下边. 为了能在WindowsFormsHost窗口上浮动控件,并实现半透明的效果,可在承载WindowsFormsHost的wpf窗口上弹出来另外一个窗口,大小和下边的窗口一致,且位置随着下边窗口变化而变化. 具体实现: 假定有两个窗口:MainWindow 和FloatWindow,其中MainWindow是承载WindowsFormsHost的窗口,F