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.返回cell
11     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 *)tableView
11 {
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 *)reuseIdentifier
22 {
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)frame
36 //{
37 ////    frame.origin.y-=30;
38 //    YYLog(@"%f",self.y);
39 //    [super setFrame:frame];
40 //}
41 
42 #pragma mark-调整子控件的位置
43 -(void)layoutSubviews
44 {
45     [super layoutSubviews];
46     //调整子标题的x值
47     self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+10;
48 }
49 
50 #pragma mark-setter
51 -(void)setItem:(YYCommonItem *)item
52 {
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)rows
61 {
62    UIImageView *bgv=[[UIImageView alloc]init];
63    UIImageView *sgv=[[UIImageView alloc]init];
64     
65     if (rows==1) {//一组中只有一个cell
66         bgv.image=[UIImage imageWithName:@"common_card_background"];
67         sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];
68     }else if(indexPath.row==0) //首个cell
69     {
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)//最后一个cell
73     {
74         bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];
75         sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];
76     }else//中间的cell
77     {
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 *)tableView
11 {
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 *)reuseIdentifier
22 {
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)layoutSubviews
40 {
41     [super layoutSubviews];
42     //调整子标题的x值
43     self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+10;
44 }
45 
46 #pragma mark-setter
47 -(void)setItem:(YYCommonItem *)item
48 {
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)rows
57 {
58     //强制转换,imageview没必要创建多次
59     UIImageView *bgv=(UIImageView *)self.backgroundView;
60     UIImageView *sgv=(UIImageView *)self.selectedBackgroundView;
61     
62     if (rows==1) {//一组中只有一个cell
63         bgv.image=[UIImage imageWithName:@"common_card_background"];
64         sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];
65     }else if(indexPath.row==0) //首个cell
66     {
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)//最后一个cell
70     {
71         bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];
72         sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];
73     }else//中间的cell
74     {
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的阴影效果。

iOS开发项目篇—50设置cell的背景,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。