最近在做一个有关UITableView相关的项目,故又对UITableView加深了学习.至于UITableView的强大之处,在此就不累赘再谈了.那么在这个Demo中,有什么可学习的内容呢? 说的再多,不如一张GIF图来的直接:
1.重用cell,注册cell重用标志 //注册cell重用标识符
[self.tableView registerClass:[YYCell class] forCellReuseIdentifier:@"linkmanCell"];
2.重用headview,注册headview重用标志 //注册头部视图的重用标识符
[self.tableView registerClass:[YYheaderView class] forHeaderFooterViewReuseIdentifier:@"header"];
3.子类化headview,自定义头视图中包含的内容 @implementation YYheaderView
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier{ if (self = [super initWithReuseIdentifier:reuseIdentifier]) { //创建与头视图大小一样的底部view UIView *headView = [[UIView alloc] init]; headView.backgroundColor = [UIColor whiteColor]; headView.frame = CGRectMake(0, 0, SCREEN_W, 44); [self.contentView addSubview:headView]; //创建带指示图片的button UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; [btn setImage:[UIImage imageNamed:@"brand_expand"] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(tipExpandBtn:) forControlEvents:UIControlEventTouchUpInside]; btn.frame = CGRectMake(20, 14, 30, 16); self.btn = btn; [self.contentView addSubview:btn]; //创建显示组信息的label UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, 7, 160, 30)]; titleLabel.textColor = [UIColor blackColor]; self.titleLabel = titleLabel; [self.contentView addSubview:titleLabel]; }
return self; }
4.调用系统带小标题的cell的type - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseIdentifier]; return self; }
5.刷新组中cell的方法,采用block回调(自定义一个block类型) //定义一个回调的block类型
typedef void (^YYheaderCallBack)(BOOL expand);
6.字典转模型(经典做法) 总结:本Demo中唯一逻辑思考方面的难点,就是在自定义block类型,在何处赋值 和 调用,以此来刷新组中cell的变化.如还没理解到位,请去下载源代码:GitHub - yaomars/-QQ-Demo ,觉得看的顺眼的话,请用力点 star... |