iOS创建头部视图

//创建头部视图

+(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.设置labelframe

    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];

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值