UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。大家先看一下两者的应用
1、首先我们介绍一下平铺的tableView,初始化一个tableView如下
#pragma mark - 设置子视图- (void)setSubviews{ UITableView * table=[[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height-20) style:UITableViewStylePlain]; self.tableView=table; //设置数据源代理 table.dataSource=self; //设置方法属性代理 table.delegate=self; [self.view addSubview:table];}
tableView需要设置两个代理,而要作为tableView的代理必须实现其代理方法,并遵守协议
/** tableView 代理功能: 1 需要告知展示数据的条数 2 需要告知展示的内容 要想作为tableView的代理 需要遵守UITableViewDataSource 和 UITableViewDelegate两个协议 */@interface ViewController ()/** 数据数组*/@property(nonatomic,strong) NSArray * dataArray;/** tableView接口*/@property(nonatomic,weak) UITableView * tableView;@end
2、我们通过当前的系统字体作为显示的内容,加载数据如下
#pragma mark - 加载数据- (void)loadData{ self.dataArray=[UIFont familyNames]; }
3、实现代理方法
#pragma mark - UITableViewDatasSource//返回记录条数- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.dataArray.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // 重复利用标识 NSString * identy=@"JRCell"; //从缓冲池获取可以利用的cell UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy]; //如果缓冲池没有可利用对象需要重新创建 if (cell==nil) { cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy]; cell.selectionStyle=UITableViewCellSelectionStyleNone; } cell.textLabel.text=self.dataArray[indexPath.row]; cell.textLabel.font=[UIFont fontWithName:self.dataArray[indexPath.row] size:18]; return cell;}
4、效果图如下
5、最简单的tableView 我们就做完了,但是在日常开发中,我们需要用到的功能不仅仅这么简单,有的时候cell是需要自定义的,下面我们完成一个美团列表展示自己定义的tableView
6、这里要求我们自定义美团列表cell,对于数据的加载和读取这里不做介绍,我们把重点放在如何自定义cell上面
① 我们先自定义一个cell,并且继承了UITableViewCell
② 然后我们向当前cell中拼接子视图
#pragma mark - 增加子视图- (void) setSubview{ // 1 增加图标 UIImageView * jrImageView=[[UIImageView alloc] initWithFrame:CGRectMake(20, 5, kRowHeight-10, kRowHeight-10)]; self.jrImageView=jrImageView; jrImageView.backgroundColor=[UIColor redColor]; [self.contentView addSubview:jrImageView]; // 2 增加标题 UILabel * titleLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+10, 10, kWidth-CGRectGetMaxX(jrImageView.frame)-10, 20)]; titleLable.text=@"汉金城烤肉自助餐厅"; titleLable.font=[UIFont boldSystemFontOfSize:18]; self.jrTitleLable=titleLable; [self.contentView addSubview:titleLable]; // 3 增加子标题 UILabel * detailLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+10, CGRectGetMaxY(titleLable.frame), kWidth-CGRectGetMaxX(jrImageView.frame)-10, 45)]; detailLable.text=@"汉金城烤肉自助餐厅汉金城烤肉自助餐厅汉金"; detailLable.numberOfLines=0; detailLable.font=[UIFont boldSystemFontOfSize:16]; detailLable.textColor=[UIColor grayColor]; self.jrDetailLable=detailLable; [self.contentView addSubview:detailLable]; // 4 增加价格 UILabel * priceLable=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(jrImageView.frame)+10, CGRectGetMaxY(detailLable.frame), 60, 25)]; priceLable.text=@"$2.9"; priceLable.font=[UIFont boldSystemFontOfSize:22]; priceLable.textColor=[UIColor colorWithRed:30/255.0 green:180/255.0 blue:150/255.0 alpha:1]; self.jrPriceLale=priceLable; [self.contentView addSubview:priceLable]; // 5 已售数量 UILabel * sellLable=[[UILabel alloc] initWithFrame:CGRectMake(kWidth-70, CGRectGetMaxY(detailLable.frame), 60, 25)]; sellLable.text=@"已售1150"; sellLable.font=[UIFont boldSystemFontOfSize:13]; sellLable.textColor=[UIColor grayColor]; self.jrSellLable=sellLable; [self.contentView addSubview:sellLable]; }
③ 我们需要对子视图开辟接口出来让外界访问
④ 定义方法初始化数据
#pragma mark - 初始化数据- (void) initDataWithInfo:(Information *) info{ //设置图标 self.jrImageView.image=[UIImage imageNamed:info.strPic]; //设置标题 self.jrTitleLable.text=info.title; //设置明细 self.jrDetailLable.text=info.detailTitle; //设置价格 self.jrPriceLale.text=[NSString stringWithFormat:@"$%.1f",info.price]; //设置销量 self.jrSellLable.text=[NSString stringWithFormat:@"销量%ld",info.soldNum]; }
⑤ 我们在代理方法里面,初始化我们自定义cell并且设置数据即可
#pragma mark 返回cell- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSString * identy=@"jrCell"; JRTableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:identy]; if (cell==nil) { cell=[[JRTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identy]; //设置选中样式为空 cell.selectionStyle=UITableViewCellSelectionStyleNone; } //重新设置数据 Information *info= self.dataArray[indexPath.row]; [cell initDataWithInfo:info]; return cell; }
作者:杰瑞教育 出处: 版权声明:本文版权归烟 台 科 技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 技术咨询: