首页 > 代码库 > iOS开发项目篇—51cell右边的内容处理
iOS开发项目篇—51cell右边的内容处理
iOS开发项目篇—51cell右边的内容处理
一、简单说明
1.说明
Cell右边的内容《几种显示情况
(1)箭头
(2)文字
(3)什么都没有
(4)开关
(5)打钩
注意:不要试图使用枚举(这样会让这个类越来越大)
实现思路:子类化,每一个子类专门负责右边的显示内容。
2.实现
先设置右边显示内容为箭头和开关两种情况。
新建一个类,继承自YYCommonItem,表示右边显示内容为箭头
新建一个类,继承自YYCommonItem,表示右边显示内容为开关
设置显示代码:(设置第一组每行的右边显示箭头,设置第二组每行的右边显示开关)
问题:
这行代码过掉之后,类型变成了父类的类型?
出现问题的原因和解决:
1 // 2 // YYCommonItem.m 3 // 4 5 #import "YYCommonItem.h" 6 7 @implementation YYCommonItem 8 +(instancetype)itemWithTitle:(NSString *)title icon:(NSString *)icon 9 {10 YYCommonItem *item=[[YYCommonItem alloc]init];11 item.title=title;12 item.icon=icon;13 return item;14 }15 16 +(instancetype)itemWithTitle:(NSString *)title17 {18 return [self itemWithTitle:title icon:nil];19 }20 @end
把类名改为self
1 @implementation YYCommonItem2 +(instancetype)itemWithTitle:(NSString *)title icon:(NSString *)icon3 {4 YYCommonItem *item=[[self alloc]init];5 item.title=title;6 item.icon=icon;7 return item;8 }
在自定义cell中,对item的类型进行判断:
YYCommonCell.m
1 // 2 // YYCommonCell.m 3 / 4 5 #pragma mark-setter 6 -(void)setItem:(YYCommonItem *)item 7 { 8 _item=item; 9 //设置基本数据10 self.imageView.image=[UIImage imageWithName:item.icon];11 self.textLabel.text=item.title;12 self.detailTextLabel.text=item.subtitle;13 14 //设置右边显示的内容15 if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头16 self.accessoryView=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]];17 }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关18 self.accessoryView=[[UISwitch alloc]init];19 }
实现效果:
3.解决循环利用问题
1 #pragma mark-setter 2 -(void)setItem:(YYCommonItem *)item 3 { 4 _item=item; 5 //设置基本数据 6 self.imageView.image=[UIImage imageWithName:item.icon]; 7 self.textLabel.text=item.title; 8 self.detailTextLabel.text=item.subtitle; 9 10 //设置右边显示的内容11 if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头12 self.accessoryView=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]];13 }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关14 { self.accessoryView=[[UISwitch alloc]init];15 }else // 取消右边的内容16 {17 self.accessoryView=nil;18 }19 }
4.优化
说明:该方法调用十分频繁,没必要每次调用都创建并加载一次imageView,可以使用懒加载创建一次就可以了。
改进后的代码如下:
YYCommonCell.m文件
1 // 2 // YYCommonCell.m 3 // 4 5 #import "YYCommonCell.h" 6 //#import "YYCommonItem.h" 7 #import "YYCommonSwitchItem.h" 8 #import "YYCommonArrowItem.h" 9 10 @interface YYCommonCell () 11 12 @property(nonatomic,strong)UISwitch *rightSwitch; 13 @property(nonatomic,strong)UIImageView *rightArrow; 14 @property(nonatomic,strong)UILabel *rightLabel; 15 16 @end 17 @implementation YYCommonCell 18 19 #pragma mark-懒加载 20 -(UIImageView *)rightArrow 21 { 22 if (_rightArrow==nil) { 23 _rightArrow=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]]; 24 } 25 return _rightArrow; 26 } 27 28 -(UISwitch *)rightSwitch 29 { 30 if (_rightSwitch==nil) { 31 _rightSwitch=[[UISwitch alloc]init]; 32 } 33 return _rightSwitch; 34 } 35 36 -(UILabel *)rightLabel 37 { 38 if (_rightLabel==nil) { 39 _rightLabel=[[UILabel alloc]init]; 40 } 41 return _rightLabel; 42 } 43 44 //初始化类方法 45 +(instancetype)cellWithTablView:(UITableView *)tableView 46 { 47 static NSString *ID=@"ID"; 48 YYCommonCell *cell=[tableView dequeueReusableCellWithIdentifier:ID]; 49 if (cell==nil) { 50 cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID]; 51 } 52 return cell; 53 } 54 55 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 56 { 57 self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]; 58 if (self) { 59 //设置标题和子标题的文字 60 self.textLabel.font=[UIFont boldSystemFontOfSize:15]; 61 self.detailTextLabel.font=[UIFont systemFontOfSize:12]; 62 63 //清除cell的颜色 64 self.backgroundColor=[UIColor clearColor]; 65 66 self.backgroundView=[[UIImageView alloc]init]; 67 self.selectedBackgroundView=[[UIImageView alloc]init]; 68 69 } 70 return self; 71 } 72 #pragma mark-调整子控件的位置 73 -(void)layoutSubviews 74 { 75 [super layoutSubviews]; 76 //调整子标题的x值 77 self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+10; 78 } 79 80 #pragma mark-setter 81 -(void)setItem:(YYCommonItem *)item 82 { 83 _item=item; 84 //设置基本数据 85 self.imageView.image=[UIImage imageWithName:item.icon]; 86 self.textLabel.text=item.title; 87 self.detailTextLabel.text=item.subtitle; 88 89 //设置右边显示的内容 90 // if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头 91 // self.accessoryView=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]]; 92 // }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关 93 // { self.accessoryView=[[UISwitch alloc]init]; 94 // }else // 取消右边的内容 95 // { 96 // self.accessoryView=nil; 97 // } 98 99 if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头100 self.accessoryView=self.rightArrow;101 }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关102 { self.accessoryView=self.rightSwitch;103 }else // 取消右边的内容104 {105 self.accessoryView=nil;106 }107 }108 109 -(void)setindexPath:(NSIndexPath *)indexPath rowsInSection:(int)rows110 {111 //强制转换,imageview没必要创建多次112 UIImageView *bgv=(UIImageView *)self.backgroundView;113 UIImageView *sgv=(UIImageView *)self.selectedBackgroundView;114 115 if (rows==1) {//一组中只有一个cell116 bgv.image=[UIImage imageWithName:@"common_card_background"];117 sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];118 }else if(indexPath.row==0) //首个cell119 {120 bgv.image=[UIImage imageWithName:@"common_card_top_background"];121 sgv.image=[UIImage imageWithName:@"common_card_top_background_highlighted"];122 }else if(indexPath.row==rows-1)//最后一个cell123 {124 bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];125 sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];126 }else//中间的cell127 {128 bgv.image=[UIImage imageWithName:@"common_card_middle_background"];129 sgv.image=[UIImage imageWithName:@"common_card_middle_background_highlighted"];130 }131 132 }133 @end
二、细节完善
1.要求右边显示文字
新建一个子类,继承自YYCommonItem。
设置视频那组的右边显示文字。
1 //3.设置组中所有行的数据2 YYCommonLabelItem *video=[YYCommonLabelItem itemWithTitle:@"视频" icon:@"video"];3 video.text=@"视频的右边显示文字";4 YYCommonItem *music=[YYCommonItem itemWithTitle:@"音乐" icon:@"music"];5 YYCommonItem *movie=[YYCommonItem itemWithTitle:@"电影" icon:@"movie"];6 YYCommonItem *cast=[YYCommonItem itemWithTitle:@"播客" icon:@"cast"];7 YYCommonItem *more=[YYCommonItem itemWithTitle:@"更多" icon:@"more"];
在YYCommonLabelItem类中,需要增加一个处理text文本的属性
1 // 2 // YYCommonLabelItem.h 3 // 4 5 #import "YYCommonItem.h" 6 7 @interface YYCommonLabelItem : YYCommonItem 8 //右边显示的文字 9 @property(nonatomic,copy)NSString *text;10 @end
在自定义cell中的代码处理:
1 // 2 // YYCommonCell.m 3 // 4 5 #import "YYCommonCell.h" 6 //#import "YYCommonItem.h" 7 #import "YYCommonSwitchItem.h" 8 #import "YYCommonArrowItem.h" 9 #import "YYCommonLabelItem.h" 10 11 @interface YYCommonCell () 12 13 @property(nonatomic,strong)UISwitch *rightSwitch; 14 @property(nonatomic,strong)UIImageView *rightArrow; 15 @property(nonatomic,strong)UILabel *rightLabel; 16 17 @end 18 @implementation YYCommonCell 19 20 #pragma mark-懒加载 21 -(UIImageView *)rightArrow 22 { 23 if (_rightArrow==nil) { 24 _rightArrow=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]]; 25 } 26 return _rightArrow; 27 } 28 29 -(UISwitch *)rightSwitch 30 { 31 if (_rightSwitch==nil) { 32 _rightSwitch=[[UISwitch alloc]init]; 33 } 34 return _rightSwitch; 35 } 36 37 -(UILabel *)rightLabel 38 { 39 if (_rightLabel==nil) { 40 _rightLabel=[[UILabel alloc]init]; 41 _rightLabel.textColor=[UIColor lightGrayColor]; 42 _rightLabel.font=[UIFont systemFontOfSize:12]; 43 } 44 return _rightLabel; 45 } 46 47 //初始化类方法 48 +(instancetype)cellWithTablView:(UITableView *)tableView 49 { 50 static NSString *ID=@"ID"; 51 YYCommonCell *cell=[tableView dequeueReusableCellWithIdentifier:ID]; 52 if (cell==nil) { 53 cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID]; 54 } 55 return cell; 56 } 57 58 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 59 { 60 self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]; 61 if (self) { 62 //设置标题和子标题的文字 63 self.textLabel.font=[UIFont boldSystemFontOfSize:15]; 64 self.detailTextLabel.font=[UIFont systemFontOfSize:12]; 65 66 //清除cell的颜色 67 self.backgroundColor=[UIColor clearColor]; 68 69 self.backgroundView=[[UIImageView alloc]init]; 70 self.selectedBackgroundView=[[UIImageView alloc]init]; 71 72 } 73 return self; 74 } 75 #pragma mark-调整子控件的位置 76 -(void)layoutSubviews 77 { 78 [super layoutSubviews]; 79 //调整子标题的x值 80 self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+5; 81 } 82 83 #pragma mark-setter 84 -(void)setItem:(YYCommonItem *)item 85 { 86 _item=item; 87 //设置基本数据 88 self.imageView.image=[UIImage imageWithName:item.icon]; 89 self.textLabel.text=item.title; 90 self.detailTextLabel.text=item.subtitle; 91 92 //设置右边显示的内容 93 // if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头 94 // self.accessoryView=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]]; 95 // }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关 96 // { self.accessoryView=[[UISwitch alloc]init]; 97 // }else // 取消右边的内容 98 // { 99 // self.accessoryView=nil;100 // }101 102 if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头103 self.accessoryView=self.rightArrow;104 }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关105 { self.accessoryView=self.rightSwitch;106 }else if ([item isKindOfClass:[YYCommonLabelItem class]]) //如果右边显示文字107 {108 //设置文字109 YYCommonLabelItem *labelItem=(YYCommonLabelItem *)item;110 self.rightLabel.text=labelItem.text;111 //根据文字计算尺寸112 self.rightLabel.size=[labelItem.text sizeWithFont:self.rightLabel.font];113 self.accessoryView=self.rightLabel;114 }115 else // 取消右边的内容116 {117 self.accessoryView=nil;118 }119 }120 121 -(void)setindexPath:(NSIndexPath *)indexPath rowsInSection:(int)rows122 {123 //强制转换,imageview没必要创建多次124 UIImageView *bgv=(UIImageView *)self.backgroundView;125 UIImageView *sgv=(UIImageView *)self.selectedBackgroundView;126 127 if (rows==1) {//一组中只有一个cell128 bgv.image=[UIImage imageWithName:@"common_card_background"];129 sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];130 }else if(indexPath.row==0) //首个cell131 {132 bgv.image=[UIImage imageWithName:@"common_card_top_background"];133 sgv.image=[UIImage imageWithName:@"common_card_top_background_highlighted"];134 }else if(indexPath.row==rows-1)//最后一个cell135 {136 bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];137 sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];138 }else//中间的cell139 {140 bgv.image=[UIImage imageWithName:@"common_card_middle_background"];141 sgv.image=[UIImage imageWithName:@"common_card_middle_background_highlighted"];142 }143 144 }145 @end
显示效果:
2.打钩+提醒数字的实现
说明:任何item的右边都可能有数字,比如热门微博的右边本来是箭头,当有新推送的微博的时候,就把箭头替换成提醒数字。本质还是箭头,只是临时变换为数字,因此对于提示数字,没必要再创建一个新的子类。
代码设计:
YYCommonItem.h文件
1 // 2 // YYCommonItem.h 3 // 4 5 #import <Foundation/Foundation.h> 6 7 @interface YYCommonItem : NSObject 8 @property(nonatomic,copy)NSString *icon; 9 @property(nonatomic,copy)NSString *title;10 @property(nonatomic,copy)NSString *subtitle;11 @property(nonatomic,strong)NSString *badgeValue;12 13 +(instancetype)itemWithTitle:(NSString *)title icon:(NSString *)icon;14 +(instancetype)itemWithTitle:(NSString *)title;15 @end
YYDiscoverViewController.m文件
1 // 2 // YYDiscoverViewController.m 3 // 4 5 #import "YYDiscoverViewController.h" 6 #import "YYSearchBar.h" 7 #import "YYCommonGroup.h" 8 #import "YYCommonItem.h" 9 #import "YYCommonCell.h" 10 #import "YYCommonArrowItem.h" 11 #import "YYCommonSwitchItem.h" 12 #import "YYCommonLabelItem.h" 13 14 /** 15 用一个模型来描述每组的信息:组头、组尾、这组的所有行模型 16 用一个模型来描述每行的信息:图标、标题、子标题、右边的样式(箭头、文字、数字、开关、打钩) 17 */ 18 19 @interface YYDiscoverViewController () 20 @property(nonatomic,strong)NSMutableArray *groups; 21 @end 22 23 @implementation YYDiscoverViewController 24 25 #pragma mark-懒加载 26 -(NSMutableArray *)groups 27 { 28 if (_groups==nil) { 29 _groups=[NSMutableArray array]; 30 } 31 return _groups; 32 } 33 34 /**屏蔽tableView的样式设置*/ 35 -(id)init 36 { 37 //分组模式 38 return [self initWithStyle:UITableViewStyleGrouped]; 39 } 40 - (void)viewDidLoad 41 { 42 [super viewDidLoad]; 43 44 //创建并添加一个搜索框 45 //添加一个搜索框 46 YYSearchBar *searchBar=[YYSearchBar SearchBar]; 47 searchBar.frame=CGRectMake(0, 100, 300, 35); 48 self.navigationItem.titleView=searchBar; 49 50 //设置tableview的属性 51 //设置全局背景色 52 self.tableView.backgroundColor=YYGlobalBg; 53 self.tableView.sectionFooterHeight=0; 54 self.tableView.sectionHeaderHeight=YYStatusCellMargin; 55 self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; 56 //不显示水平滚动条 57 self.tableView.showsVerticalScrollIndicator=NO; 58 59 60 // 初始化模型数据 61 [self setupGroups]; 62 63 YYLog(@"viewDidLoad---%@",NSStringFromUIEdgeInsets(self.tableView.contentInset)); 64 self.tableView.contentInset=UIEdgeInsetsMake(YYStatusCellMargin-35, 0, 0, 0); 65 } 66 67 -(void)setupGroups 68 { 69 //第0组 70 [self setupGroup0]; 71 //第1组 72 [self setupGroup1]; 73 //第2组 74 [self setupGroup2]; 75 } 76 77 -(void)setupGroup0 78 { 79 //1.创建组 80 YYCommonGroup *group=[YYCommonGroup group]; 81 [self.groups addObject:group]; 82 83 //2.设置组的基本数据 84 group.groupheader=@"第0组"; 85 group.grougfooter=@"第0组的尾部"; 86 87 //3.设置组中所有行的数据 88 YYCommonArrowItem *hotStatus=[YYCommonArrowItem itemWithTitle:@"热门微博" icon:@"hot_status"]; 89 hotStatus.subtitle=@"笑话、娱乐、神最右都在这儿!"; 90 hotStatus.badgeValue=http://www.mamicode.com/@"10"; 91 92 YYCommonArrowItem *findPeople=[YYCommonArrowItem itemWithTitle:@"找人" icon:@"find_people"]; 93 findPeople.subtitle=@"名人,有意思的人尽在这里!"; 94 95 group.items=@[hotStatus,findPeople]; 96 } 97 98 -(void)setupGroup1 99 {100 //1.创建组101 YYCommonGroup *group=[YYCommonGroup group];102 [self.groups addObject:group];103 104 //2.设置组的基本数据105 106 //3.设置组中所有行的数据107 YYCommonSwitchItem *gamecenter=[YYCommonSwitchItem itemWithTitle:@"游戏中心" icon:@"game_center"];108 YYCommonSwitchItem *near=[YYCommonSwitchItem itemWithTitle:@"周边" icon:@"near"];109 110 group.items=@[gamecenter,near];111 112 }113 114 -(void)setupGroup2115 {116 //1.创建组117 YYCommonGroup *group=[YYCommonGroup group];118 [self.groups addObject:group];119 120 //2.设置组的基本数据121 122 //3.设置组中所有行的数据123 YYCommonLabelItem *video=[YYCommonLabelItem itemWithTitle:@"视频" icon:@"video"];124 video.text=@"视频的右边显示文字";125 YYCommonItem *music=[YYCommonItem itemWithTitle:@"音乐" icon:@"music"];126 music.badgeValue=http://www.mamicode.com/@"1231";127 YYCommonItem *movie=[YYCommonItem itemWithTitle:@"电影" icon:@"movie"];128 YYCommonItem *cast=[YYCommonItem itemWithTitle:@"播客" icon:@"cast"];129 YYCommonItem *more=[YYCommonItem itemWithTitle:@"更多" icon:@"more"];130 131 group.items=@[video,music,movie,cast,more];132 }133 134 135 #pragma mark-tableView的代理136 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView137 {138 return self.groups.count;139 }140 141 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section142 {143 YYCommonGroup *group=self.groups[section];144 return group.items.count;145 }146 147 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath148 {149 //1.获取cell150 YYCommonCell *cell=[YYCommonCell cellWithTablView:tableView];151 //2.设置cell的显示数据152 YYCommonGroup *group=self.groups[indexPath.section];153 YYCommonItem *item=group.items[indexPath.row];154 cell.item=item;155 [cell setindexPath:indexPath rowsInSection:group.items.count];156 //3.返回cell157 return cell;158 }159 @end
新建一个继承自UIButton的类,对数字提醒按钮进行封装。
YYbadgeView.h文件
1 //2 // YYbadgeView.h3 //4 5 #import <UIKit/UIKit.h>6 7 @interface YYbadgeView : UIButton8 @property(nonatomic,copy)NSString *badgeValue;9 @end
YYbadgeView.m文件
1 // 2 // YYbadgeView.m 3 // 4 5 #import "YYbadgeView.h" 6 7 @implementation YYbadgeView 8 9 - (id)initWithFrame:(CGRect)frame10 {11 self = [super initWithFrame:frame];12 if (self) {13 //设置标题的字体14 self.titleLabel.font=[UIFont systemFontOfSize:12];15 //设置背景图片16 [self setBackgroundImage:[UIImage resizedImage:@"main_badge"] forState:UIControlStateNormal];17 //设置按钮的高度等于背景图片的高度18 self.height=self.currentBackgroundImage.size.height;19 }20 return self;21 }22 -(void)setBadgeValue:(NSString *)badgeValue23 {24 //设置文字25 _badgeValue=http://www.mamicode.com/badgeValue;26 [self setTitle:badgeValue forState:UIControlStateNormal];27 28 //根据文字计算自己的尺寸29 CGSize titleSize=[badgeValue sizeWithFont:self.titleLabel.font];30 CGFloat bw=self.currentBackgroundImage.size.width;31 if (titleSize.width<bw) {32 self.width=bw;33 }else34 {35 self.width=titleSize.width+10;36 }37 }38 @end
在自定义的cell中的代码处理:
YYCommonCell.m文件
1 // 2 // YYCommonCell.m 3 // 4 5 #import "YYCommonCell.h" 6 //#import "YYCommonItem.h" 7 #import "YYCommonSwitchItem.h" 8 #import "YYCommonArrowItem.h" 9 #import "YYCommonLabelItem.h" 10 #import "YYbadgeView.h" 11 12 @interface YYCommonCell () 13 14 @property(nonatomic,strong)UISwitch *rightSwitch; 15 @property(nonatomic,strong)UIImageView *rightArrow; 16 @property(nonatomic,strong)UILabel *rightLabel; 17 @property(nonatomic,strong)UIImageView *rightCheckmark; 18 @property(nonatomic,strong)YYbadgeView *badgeValue; 19 20 21 @end 22 @implementation YYCommonCell 23 24 #pragma mark-懒加载 25 -(UIImageView *)rightArrow 26 { 27 if (_rightArrow==nil) { 28 _rightArrow=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_arrow"]]; 29 } 30 return _rightArrow; 31 } 32 33 -(UISwitch *)rightSwitch 34 { 35 if (_rightSwitch==nil) { 36 _rightSwitch=[[UISwitch alloc]init]; 37 } 38 return _rightSwitch; 39 } 40 41 -(UILabel *)rightLabel 42 { 43 if (_rightLabel==nil) { 44 _rightLabel=[[UILabel alloc]init]; 45 _rightLabel.textColor=[UIColor lightGrayColor]; 46 _rightLabel.font=[UIFont systemFontOfSize:12]; 47 } 48 return _rightLabel; 49 } 50 51 -(UIImageView *)rightCheckmark 52 { 53 if (_rightCheckmark==nil) { 54 _rightCheckmark=[[UIImageView alloc]initWithImage:[UIImage imageWithName:@"common_icon_checkmark"]]; 55 } 56 return _rightCheckmark; 57 } 58 59 -(YYbadgeView *)badgeValue 60 { 61 if (_badgeValue=http://www.mamicode.com/=nil) { 62 _badgeValue=http://www.mamicode.com/[[YYbadgeView alloc]init]; 63 } 64 return _badgeValue; 65 } 66 //初始化类方法 67 +(instancetype)cellWithTablView:(UITableView *)tableView 68 { 69 static NSString *ID=@"ID"; 70 YYCommonCell *cell=[tableView dequeueReusableCellWithIdentifier:ID]; 71 if (cell==nil) { 72 cell = [[YYCommonCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ID]; 73 } 74 return cell; 75 } 76 77 -(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 78 { 79 self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]; 80 if (self) { 81 //设置标题和子标题的文字 82 self.textLabel.font=[UIFont boldSystemFontOfSize:15]; 83 self.detailTextLabel.font=[UIFont systemFontOfSize:12]; 84 85 //清除cell的颜色 86 self.backgroundColor=[UIColor clearColor]; 87 88 self.backgroundView=[[UIImageView alloc]init]; 89 self.selectedBackgroundView=[[UIImageView alloc]init]; 90 91 } 92 return self; 93 } 94 #pragma mark-调整子控件的位置 95 -(void)layoutSubviews 96 { 97 [super layoutSubviews]; 98 //调整子标题的x值 99 self.detailTextLabel.x=CGRectGetMaxX(self.textLabel.frame)+5;100 }101 102 #pragma mark-setter103 -(void)setItem:(YYCommonItem *)item104 {105 _item=item;106 //设置基本数据107 self.imageView.image=[UIImage imageWithName:item.icon];108 self.textLabel.text=item.title;109 self.detailTextLabel.text=item.subtitle;110 111 if (item.badgeValue) {//紧急情况,右边有提醒数字112 self.badgeValue.badgeValue=http://www.mamicode.com/item.badgeValue;113 self.accessoryView=self.badgeValue;114 }115 else if ([item isKindOfClass:[YYCommonArrowItem class]]) {//如果是箭头116 self.accessoryView=self.rightArrow;117 }else if ([item isKindOfClass:[YYCommonSwitchItem class]])//如果是开关118 { self.accessoryView=self.rightSwitch;119 }else if ([item isKindOfClass:[YYCommonLabelItem class]]) //如果右边显示文字120 {121 //设置文字122 YYCommonLabelItem *labelItem=(YYCommonLabelItem *)item;123 self.rightLabel.text=labelItem.text;124 //根据文字计算尺寸125 self.rightLabel.size=[labelItem.text sizeWithFont:self.rightLabel.font];126 self.accessoryView=self.rightLabel;127 }128 else // 取消右边的内容129 {130 self.accessoryView=nil;131 }132 }133 134 -(void)setindexPath:(NSIndexPath *)indexPath rowsInSection:(int)rows135 {136 //强制转换,imageview没必要创建多次137 UIImageView *bgv=(UIImageView *)self.backgroundView;138 UIImageView *sgv=(UIImageView *)self.selectedBackgroundView;139 140 if (rows==1) {//一组中只有一个cell141 bgv.image=[UIImage imageWithName:@"common_card_background"];142 sgv.image=[UIImage imageWithName:@"common_card_background_highlighted"];143 }else if(indexPath.row==0) //首个cell144 {145 bgv.image=[UIImage imageWithName:@"common_card_top_background"];146 sgv.image=[UIImage imageWithName:@"common_card_top_background_highlighted"];147 }else if(indexPath.row==rows-1)//最后一个cell148 {149 bgv.image=[UIImage imageWithName:@"common_card_bottom_background"];150 sgv.image=[UIImage imageWithName:@"common_card_bottom_background_highlighted"];151 }else//中间的cell152 {153 bgv.image=[UIImage imageWithName:@"common_card_middle_background"];154 sgv.image=[UIImage imageWithName:@"common_card_middle_background_highlighted"];155 }156 157 }158 @end
实现效果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。