//创建头部视图
+(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];
}