首页 > 代码库 > iOS开发项目篇—50设置cell的背景
iOS开发项目篇—50设置cell的背景
iOS开发项目篇—50设置cell的背景
一、简单说明
当前样式:
1.去掉分隔线
2.设置背景图片(新浪提供了四种图片,底部的图片有阴影)
cell的四种背景图
问题:cell怎么知道自己当前是处在第几组的第几行?
在自定义cell中提供一个方法,共外界传递当前的组和行
YYCommonCell.h文件
1 // 2 // YYCommonCell.h 3 // 4 5 #import <Foundation/Foundation.h> 6 @class YYCommonItem; 7 @interface YYCommonCell : UITableViewCell 8 9 //数据10 @property(nonatomic,strong)YYCommonItem *item;11 //类方法,提供cell的初始化12 +(instancetype)cellWithTablView:(UITableView *)tableView;13 14 -(void)setindexPath :(NSIndexPath *)indexPath rowsInSection:(int)row;15 @end
在控制器中传递当前的组和行号
1 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 2 { 3 //1.获取cell 4 YYCommonCell *cell=[YYCommonCell cellWithTablView:tableView]; 5 //2.设置cell的显示数据 6 YYCommonGroup *group=self.groups[indexPath.section]; 7 YYCommonItem *item=group.items[indexPath.row]; 8 cell.item=item; 9 [cell setindexPath:indexPath rowsInSection:group.items.count];10 //3.返回cell11 return cell;12 }
YYCommonCell.m文件
1 // 2 // YYCommonCell.m 3 // 4 5 #import "YYCommonCell.h" 6 #import "YYCommonItem.h" 7 8 @implementation YYCommonCell 9 //初始化类方法10 +(instancetype)cellWithTablView:(UITableView *)tableView11 {12 static NSString *ID=@"ID";13 YYCommonCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];14 if (cell==nil) {15 // cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];16 cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];17 }18 return cell;19 }20 21 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier22 {23 self=[super initWithStyle:style reuseIdentifier:reuseIdentifier];24 if (self) {25 //设置标题和子标题的文字26 self.textLabel.font=[UIFont boldSystemFontOfSize:15];27 self.detailTextLabel.font=[UIFont systemFontOfSize:12];28 29 //清除cell的颜色30 self.backgroundColor=[UIColor clearColor];31 }32 return self;33 }34 35 //-(void)setFrame:(CGRect)frame36 //{37 //// frame.origin.y-=30;38 // YYLog(@"%f",self.y);39 // [super setFrame:frame];40 //}41 42 #pragma mark-调整子控件的位置43 -(void)layoutSubviews44 {45 [super layoutSubviews];46 //调整子标题的x值47 self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+10;48 }49 50 #pragma mark-setter51 -(void)setItem:(YYCommonItem *)item52 {53 _item=item;54 //设置基本数据55 self.imageView.image=[UIImage imageWithName:item.icon];56 self.textLabel.text=item.title;57 self.detailTextLabel.text=item.subtitle;58 }59 60 -(void)setindexPath:(NSIndexPath *)indexPath rowsInSection:(int)rows61 {62 UIImageView *bgv=[[UIImageView alloc]init];63 UIImageView *sgv=[[UIImageView alloc]init];64 65 if (rows==1) {//一组中只有一个cell66 bgv.image=[UIImage imageWithName:@"common_card_background"];67 sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];68 }else if(indexPath.row==0) //首个cell69 {70 bgv.image=[UIImage imageWithName:@"common_card_top_background"];71 sgv.image=[UIImage imageWithName:@"common_card_top_background_highlighted"];72 }else if(indexPath.row==rows-1)//最后一个cell73 {74 bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];75 sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];76 }else//中间的cell77 {78 bgv.image=[UIImage imageWithName:@"common_card_middle_background"];79 sgv.image=[UIImage imageWithName:@"common_card_middle_background_highlighted"];80 }81 self.backgroundView=bgv;82 self.selectedBackgroundView=sgv;83 }84 @end
新的问题:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法调用的频率特别高,没必要每次调用的时候都创建两个imageview。
修改代码:
1 // 2 // YYCommonCell.m 3 // 4 5 #import "YYCommonCell.h" 6 #import "YYCommonItem.h" 7 8 @implementation YYCommonCell 9 //初始化类方法10 +(instancetype)cellWithTablView:(UITableView *)tableView11 {12 static NSString *ID=@"ID";13 YYCommonCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];14 if (cell==nil) {15 // cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];16 cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID];17 }18 return cell;19 }20 21 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier22 {23 self=[super initWithStyle:style reuseIdentifier:reuseIdentifier];24 if (self) {25 //设置标题和子标题的文字26 self.textLabel.font=[UIFont boldSystemFontOfSize:15];27 self.detailTextLabel.font=[UIFont systemFontOfSize:12];28 29 //清除cell的颜色30 self.backgroundColor=[UIColor clearColor];31 32 self.backgroundView=[[UIImageView alloc]init];33 self.selectedBackgroundView=[[UIImageView alloc]init];34 35 }36 return self;37 }38 #pragma mark-调整子控件的位置39 -(void)layoutSubviews40 {41 [super layoutSubviews];42 //调整子标题的x值43 self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+10;44 }45 46 #pragma mark-setter47 -(void)setItem:(YYCommonItem *)item48 {49 _item=item;50 //设置基本数据51 self.imageView.image=[UIImage imageWithName:item.icon];52 self.textLabel.text=item.title;53 self.detailTextLabel.text=item.subtitle;54 }55 56 -(void)setindexPath:(NSIndexPath *)indexPath rowsInSection:(int)rows57 {58 //强制转换,imageview没必要创建多次59 UIImageView *bgv=(UIImageView *)self.backgroundView;60 UIImageView *sgv=(UIImageView *)self.selectedBackgroundView;61 62 if (rows==1) {//一组中只有一个cell63 bgv.image=[UIImage imageWithName:@"common_card_background"];64 sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];65 }else if(indexPath.row==0) //首个cell66 {67 bgv.image=[UIImage imageWithName:@"common_card_top_background"];68 sgv.image=[UIImage imageWithName:@"common_card_top_background_highlighted"];69 }else if(indexPath.row==rows-1)//最后一个cell70 {71 bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];72 sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];73 }else//中间的cell74 {75 bgv.image=[UIImage imageWithName:@"common_card_middle_background"];76 sgv.image=[UIImage imageWithName:@"common_card_middle_background_highlighted"];77 }78 79 }80 @end
界面显示效果:
说明:注意每组最后一个cell的阴影效果。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。