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的背景,布布扣,bubuko.com

时间: 2024-12-23 04:20:43

iOS开发项目篇—50设置cell的背景的相关文章

iOS开发项目篇—54&quot;设置&quot;界面的搭建

iOS开发项目篇—54"设置"界面的搭建 一.实现 新建一个设置控制器,当点击“我”控制器导航栏“设置”按钮时,即跳转到该界面 1.在“我”控制器中对导航栏“设置按钮”的处理 1 // 2 // YYProfileViewController.m 3 // 4 5 #import "YYProfileViewController.h" 6 #import "YYCommonGroup.h" 7 #import "YYCommonItem

iOS开发项目篇—40搭建cell的基本结构

iOS开发项目篇—40搭建cell的基本结构 一.简单说明 1.策略:针对微博可能出现的多种情况(只有文字,有文字有配图,有转发微博等),一次性加载所用的子控件到cell中,对于没有数据的空间进行隐藏.(不管cell以后会显示什么子控件,把所有有可能显示的子控件都添加上去·添加到contentView上) 微博cell的显示示例: 2.自定义cell的步骤: 1.新建一个继承自UITablecell的子类 2.在initWithStyle:方法中进行子控件的初始化 (1)将有可能显示的所有子控件

iOS开发项目篇—13标题栏设置

iOS开发项目篇—13标题栏设置 一.添加标题栏 代码: 1 #import "YYHomeTableViewController.h" 2 #import "YYOneViewController.h" 3 4 @interface YYHomeTableViewController () 5 6 @end 7 8 @implementation YYHomeTableViewController 9 10 - (id)initWithStyle:(UITable

iOS开发项目篇—05主题设置

iOS开发项目篇—05主题设置 一.实现效果 1.效果图示 注意查看界面的导航栏 消息界面导航栏上的“写消息” 发现界面上的“系统设置” “我”界面上德“设置” 2.实现说明 (1)适配IOS6和IOS7,要求导航标题栏和上面的按钮的设置基本一致. (2)导航栏上德按钮,设置三种状态,默认状态下为橙色,不可用状态下为高亮灰色,点击(高亮)状态下为红色. (3)设置导航栏上的按钮,有两种方式 第一种:下面是消息页面添加“写私信”的代码,可以在每次需要类似设置的时候都拷贝这样的代码. 1 //第一种

iOS开发项目篇—46时间和来源的处理(cell的复用问题)

iOS开发项目篇—46时间和来源的处理(cell的复用问题)一.简单说明 1.存在的问题:             2.问题描述: 刷新微博界面后,展示的最新的微博数据时间显示为“刚刚”,在项目中对时间进行设计的时候,如果是在1分钟之内发表的,那么显示为“刚刚”.查看后面的微博数据后,回过头来(1分钟已经过去了),此时之前显示为“刚刚”的微博,应该显示XX分钟以前,确实显示了,但是时间的frame不正确(此时的frame=="刚刚"两个字的frame). 提示:cell的复用问题,为了

iOS开发项目篇—36封装微博业务

iOS开发项目篇—36封装微博业务 一.简单说明 1.请求参数面向模型 2.请求结果面向模型 3.对控制器来说应该屏蔽业务细节.不让控制器关心(知道)业务细节,它只需要知道自己在做某个业务 @通过一个专门的业务处理类:处理微博业务细节 说明: 业务:加载新的微博首页数据 实现:给新浪服务器发送一个GET请求 业务:加载更多的首页微博数据 实现1:给新浪服务器发送一个GET请求 实现2:去沙盒中加载以前离线缓存的微博数据  二.实现 1.新建一个微博业务处理类,继承自NSObject 微博业务处理

iOS开发项目篇—34获取用户信息

iOS开发项目篇—34获取用户信息 一.简单说明 需求:获取当前用户的昵称 ,需要获取当前登录用户的个人信息. 查看接口 要求传递的参数 这里要获取的时用户的昵称(所以使用用户id作为参数传入) 二.实现代码 1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 //设置导航栏内容 6 [self setupNavBar]; 7 8 //集成刷新控件 9 [self setupRefresh]; 10 11 //设置用户的昵称为标题 12 [s

iOS开发项目篇—53&quot;我&quot;界面的搭建

iOS开发项目篇—53"我"界面的搭建 一.简单说明 由于“我”这个界面和发现控制器的界面在本质上是一样的,所以,在这里可以拷贝以快速的完成“我”这个控制器界面的搭建. 全部拷贝,粘贴之后,简单的调整就可以了. 实现的代码如下: YYProfileViewController.m文件 1 // 2 // YYProfileViewController.m 3 // 4 5 #import "YYProfileViewController.h" 6 #import &

iOS开发项目篇—47Toolbar工具条

iOS开发项目篇—47Toolbar工具条 一.基本设置 说明:完成微博cell中toolbar的基本设置(转发数.评论数.赞) 实现代码: YYStatusToolbar.m文件 1 // 2 // YYStatusToolbar.m 3 // 4 5 #import "YYStatusToolbar.h" 6 7 @interface YYStatusToolbar () 8 /**用来保存两条竖线*/ 9 @property(nonatomic,strong)NSMutableA