//创建头部视图
+(instancetype)headerViewWithTableView:(UITableView *)tableView{
return [[self alloc]initWithTableView:tableView];
}
-(instancetype)initWithTableView:(UITableView *)tableView{
static NSString * indentifier = @"header";
GYLHeaderView * headerView = [tableView dequeueReusableCellWithIdentifier:indentifier];
if (headerView == nil) {
headerView = [[GYLHeaderView alloc]initWithReuseIdentifier:indentifier];
}
return headerView;
}
//但凡在init中获得的frame都是 0
-(id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
if(self =[super initWithReuseIdentifier:reuseIdentifier])
{
//1.添加子控件
//1.1添加按钮
UIButton * btn = [UIButton buttonWithType:UIButtonTypeCustom];
//添加按钮的点击事件
[btn addTarget:self action:@selector(btnOnClick:) forControlEvents:UIControlEventTouchDragInside];
//设置按钮的背景图片
[btn setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg_highlighted"] forState:UIControlStateHighlighted];
//设置按钮的上的尖尖的图片
[btn setImage:[UIImage imageNamed:@"buddy_header_arrow"] forState:UIControlStateNormal];
//设置按钮的内容左对齐
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
//2.设置按钮的内边距,这样按钮的内容距离左边就有一定的距离
btn.contentEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
//3.设置按钮色标题和图片之间的距离
btn.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
// btn.imageEdgeInsets 这是设置图片的距离
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
//设置btn中的图片不填充整个imageView
btn.imageView.contentMode = UIViewContentModeCenter;
//超出的部分不要进行剪切
// btn.imageView.clipsToBounds = NO;
btn.imageView.layer.masksToBounds = NO;
[self addSubview:btn];
self.btn = btn ;
//1.2添加label
UILabel * label = [[UILabel alloc]init];
// label.backgroundColor = [UIColor grayColor];
//设置文本右对齐
label.textAlignment = NSTextAlignmentRight;
label.textColor = [UIColor grayColor];
[self addSubview:label];
self.label = label;
}
return self;
}
// 该方法在控件的frame被改变的时候就会调用
// 该方法一般用于调整子控件的位置
- (void)layoutSubviews
{
#warning 切记重写layoutSubviews方法一定要调用父类的layoutSubviews
[super layoutSubviews];
// 1.设置按钮的frame
self.btn.frame = self.bounds;
// 2.设置label的frame
CGFloat padding = 20;// 间隙
CGFloat labelY = 0;
CGFloat labelH = self.bounds.size.height;
CGFloat labelW = 150;
CGFloat labelX = self.bounds.size.width - padding - labelW;
self.label.frame = CGRectMake(labelX, labelY, labelW, labelH);
}
- (void)btnOnClick:(UIButton *)btn
{
NSLog(@"按钮被点击了");
// 1.修改组模型的isOpen属性
// 修改模型数据数据
self.qqGroup.open = !self.qqGroup.isOpen;
// 2. 刷新表格(通知代理)
if ([self.delegate respondsToSelector:@selector(headerViewDidClickHeaderView:)]) {
[self.delegate headerViewDidClickHeaderView:self];
}
// 3.修改btn上图片,让图片旋转
// self.btn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2);
// NSLog(@"%p %@", self, self.qqGroup.name);
}
#pragma mark - 当一个控件被添加到其它视图上的时候会调用以下方法
// 已经被添加到父视图上的时候会调用
- (void)didMoveToSuperview
{
// 在这个方法中就快要拿到最新的被添加到tableview上的头部视图修改它的图片
if (self.qqGroup.isOpen) {
self.btn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2);
}
}
// 即将被添加到父视图上的时候会调用
- (void)willMoveToSuperview:(UIView *)newSuperview
{
// NSLog(@"willMoveToSuperview");
}
- (void)setQqGroup:(GYLGroupModel *)qqGroup
{
_qqGroup = qqGroup;
// 1.设置按钮上的文字
[self.btn setTitle:_qqGroup.name forState:UIControlStateNormal];
// 2.设置在线人数
self.label.text = [NSString stringWithFormat:@"%@/%d", _qqGroup.online, (int)_qqGroup.friends.count];
}
原文:http://blog.csdn.net/guoyule2010/article/details/44026843