UI基础__类似QQ好友列表制作

来源:互联网 发布:c语言 面向过程 编辑:程序博客网 时间:2024/05/22 07:57

实现思路:
1.获取数据源,把数据字典转模型
2.创建cell 添加自定义的创建cell的类(继承自UITableViewCell)
3.创建headerView

+ (instancetype) headerView:(UITableView *)tableView {    HMHeaderView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"qq"];    if (headerView == nil) {        //创建        headerView = [[HMHeaderView alloc] initWithReuseIdentifier:@"qq"];    }    return headerView;}//重写创建headerView的方法- (instancetype) initWithReuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithReuseIdentifier:reuseIdentifier];    if (self) {        //添加子控件        UIButton *nameview=[[UIButton alloc] init];        self.nameview=nameview;        [nameview setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];        //内容左对齐        nameview.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;        [self.contentView addSubview:nameview];        //设置小图标        [self.nameview setImage:[UIImage imageNamed:@"buddy_header_arrow"] forState:UIControlStateNormal];        //设置按钮的背景        [self.nameview setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg"] forState:UIControlStateNormal];        [self.nameview setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg_highlighted"] forState:UIControlStateHighlighted];        //设置按钮的小图标的旋转方式--围绕图标的中心旋转        self.nameview.imageView.contentMode=UIViewContentModeCenter;        //设置按钮的图标如果超出图标的原始尺寸范围,也不会进行裁切        self.nameview.imageView.clipsToBounds=NO;        //设置按钮的内容左边内间距        nameview.contentEdgeInsets=UIEdgeInsetsMake(0, 10, 0, 0);        //绑定事件        [nameview addTarget:self action:@selector(headerViewBtnDidClick) forControlEvents:UIControlEventTouchUpInside];        UILabel *numberView=[[UILabel alloc] init];        //设置按钮的文本的左间距        nameview.titleEdgeInsets=UIEdgeInsetsMake(0, 10, 0, 0);        self.numberView=numberView;        //设置对齐        numberView.textAlignment=NSTextAlignmentRight;        [self.contentView addSubview:numberView];    }    return self;}//按钮被点击的时候调用这个方法进行处理- (void)headerViewBtnDidClick{    //1.展开或者合并    self.fg.isExpand=!self.fg.isExpand;    //调用代理方法    if ([self.delegate respondsToSelector:@selector(HeaderViewBtnDidClick:)]) {        [self.delegate HeaderViewBtnDidClick:self];    }}//设置子控件的frame值- (void)layoutSubviews{    [super layoutSubviews];    //设置按钮的Frame,它与当前headerView坐标大小一致    self.nameview.frame=self.bounds;    //设置label的frame    self.numberView.frame=CGRectMake(250, 10, 110, 20);}//当将一个控件添加到它的父容器的时候会调用这个方法- (void)willMoveToSuperview:(UIView *)newSuperview{    [super willMoveToSuperview:newSuperview];    //2.旋转小图标    if (self.fg.isExpand==YES) {        self.nameview.imageView.transform=CGAffineTransformMakeRotation(M_PI_2);    }    else    {        self.nameview.imageView.transform=CGAffineTransformMakeRotation(0);    }}

在ViewController中需要注意的:

//为每一组的头部设置自定义view--UIView- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{    HMHeaderView *headerView=[HMHeaderView headerView:tableView];    headerView.tag=section;    //指定代理    headerView.delegate=self;    //赋值    headerView.fg=self.friendGroups[section];    return  headerView;}//实现代理方法-(void)HeaderbtnDidClick:(XYheaderCell *)headCell{    //如果使用reloadData,数据不会新建,全部在缓存区里面拿,不会调用init方法,    //    [self.tableView reloadData];    NSIndexSet *set=[NSIndexSet indexSetWithIndex:[self.arr indexOfObject:headCell.data]];    [self.tableView reloadSections:set withRowAnimation:UITableViewRowAnimationFade];}//为实现图文混排的效果,设置button的图片选择Image//设置按钮的小图标的旋转方式--围绕图标的中心旋转self.nameview.imageView.contentMode=UIViewContentModeCenter;//设置按钮的图标如果超出图标的原始尺寸范围,也不会进行裁切self.nameview.imageView.clipsToBounds=NO;//设置按钮的内容左边内间距nameview.contentEdgeInsets=UIEdgeInsetsMake(0, 10, 0, 0);//添加点击的绑定事件//当将一个控件添加到它的父容器的时候会调用这个方法- (void)willMoveToSuperview:(UIView *)newSuperview{    [super willMoveToSuperview:newSuperview];    //2.旋转小图标    if (self.fg.isExpand==YES) {        self.nameview.imageView.transform=CGAffineTransformMakeRotation(M_PI_2);    }    else    {        self.nameview.imageView.transform=CGAffineTransformMakeRotation(0);    }}
0 0
原创粉丝点击