首页 > 代码库 > iOS开发项目篇—52cell点击事件的处理
iOS开发项目篇—52cell点击事件的处理
iOS开发项目篇—52cell点击事件的处理
一、简单说明
1.简单说明
关于tableView,cell的点击事件是不可避免的。那么在开发中应该如何很好的处理cell的点击事件呢?
可以在代理方法中对点击了那个cell进行判断,根据行数的不同,做出不同的选择。
垃圾代码如下:
2.在多数情况下,点击cell都是跳转到对应的控制器。
YYCommonItem.h文件
1 // 2 // YYCommonItem.h 3 // 4 5 #import <Foundation/Foundation.h> 6 7 @interface YYCommonItem : NSObject 8 /**图标*/ 9 @property(nonatomic,copy)NSString *icon;10 /**标题*/11 @property(nonatomic,copy)NSString *title;12 /**子标题*/13 @property(nonatomic,copy)NSString *subtitle;14 /**右边显示的提醒数字*/15 @property(nonatomic,strong)NSString *badgeValue;16 //点击这行cell,需要跳转到哪个控制器17 @property(nonatomic,assign)Class destVcClass;18 19 +(instancetype)itemWithTitle:(NSString *)title icon:(NSString *)icon;20 +(instancetype)itemWithTitle:(NSString *)title;21 @end
YYDiscoverViewController.m中处理cell的点击事件的代码
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 #import "YYOneViewController.h" 14 #import "YYTwoViewController.h" 15 16 /** 17 用一个模型来描述每组的信息:组头、组尾、这组的所有行模型 18 用一个模型来描述每行的信息:图标、标题、子标题、右边的样式(箭头、文字、数字、开关、打钩) 19 */ 20 21 @interface YYDiscoverViewController () 22 @property(nonatomic,strong)NSMutableArray *groups; 23 @end 24 25 @implementation YYDiscoverViewController 26 27 #pragma mark-懒加载 28 -(NSMutableArray *)groups 29 { 30 if (_groups==nil) { 31 _groups=[NSMutableArray array]; 32 } 33 return _groups; 34 } 35 36 /**屏蔽tableView的样式设置*/ 37 -(id)init 38 { 39 //分组模式 40 return [self initWithStyle:UITableViewStyleGrouped]; 41 } 42 - (void)viewDidLoad 43 { 44 [super viewDidLoad]; 45 46 //创建并添加一个搜索框 47 //添加一个搜索框 48 YYSearchBar *searchBar=[YYSearchBar SearchBar]; 49 searchBar.frame=CGRectMake(0, 100, 300, 35); 50 self.navigationItem.titleView=searchBar; 51 52 //设置tableview的属性 53 //设置全局背景色 54 self.tableView.backgroundColor=YYGlobalBg; 55 self.tableView.sectionFooterHeight=0; 56 self.tableView.sectionHeaderHeight=YYStatusCellMargin; 57 self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone; 58 //不显示水平滚动条 59 self.tableView.showsVerticalScrollIndicator=NO; 60 61 62 // 初始化模型数据 63 [self setupGroups]; 64 65 YYLog(@"viewDidLoad---%@",NSStringFromUIEdgeInsets(self.tableView.contentInset)); 66 self.tableView.contentInset=UIEdgeInsetsMake(YYStatusCellMargin-35, 0, 0, 0); 67 } 68 69 -(void)setupGroups 70 { 71 //第0组 72 [self setupGroup0]; 73 //第1组 74 [self setupGroup1]; 75 //第2组 76 [self setupGroup2]; 77 } 78 79 -(void)setupGroup0 80 { 81 //1.创建组 82 YYCommonGroup *group=[YYCommonGroup group]; 83 [self.groups addObject:group]; 84 85 //2.设置组的基本数据 86 group.groupheader=@"第0组"; 87 group.grougfooter=@"第0组的尾部"; 88 89 //3.设置组中所有行的数据 90 YYCommonArrowItem *hotStatus=[YYCommonArrowItem itemWithTitle:@"热门微博" icon:@"hot_status"]; 91 hotStatus.subtitle=@"笑话、娱乐、神最右都在这儿!"; 92 hotStatus.badgeValue=http://www.mamicode.com/@"10"; 93 94 YYCommonArrowItem *findPeople=[YYCommonArrowItem itemWithTitle:@"找人" icon:@"find_people"]; 95 findPeople.subtitle=@"名人,有意思的人尽在这里!"; 96 97 group.items=@[hotStatus,findPeople]; 98 } 99 100 -(void)setupGroup1101 {102 //1.创建组103 YYCommonGroup *group=[YYCommonGroup group];104 [self.groups addObject:group];105 106 //2.设置组的基本数据107 108 //3.设置组中所有行的数据109 YYCommonSwitchItem *gamecenter=[YYCommonSwitchItem itemWithTitle:@"游戏中心" icon:@"game_center"];110 YYCommonSwitchItem *near=[YYCommonSwitchItem itemWithTitle:@"周边" icon:@"near"];111 112 group.items=@[gamecenter,near];113 114 }115 116 -(void)setupGroup2117 {118 //1.创建组119 YYCommonGroup *group=[YYCommonGroup group];120 [self.groups addObject:group];121 122 //2.设置组的基本数据123 124 //3.设置组中所有行的数据125 YYCommonLabelItem *video=[YYCommonLabelItem itemWithTitle:@"视频" icon:@"video"];126 video.text=@"视频的右边显示文字";127 YYCommonItem *music=[YYCommonItem itemWithTitle:@"音乐" icon:@"music"];128 music.badgeValue=http://www.mamicode.com/@"1231";129 YYCommonItem *movie=[YYCommonItem itemWithTitle:@"电影" icon:@"movie"];130 movie.destVcClass=[YYOneViewController class];131 YYCommonItem *cast=[YYCommonItem itemWithTitle:@"播客" icon:@"cast"];132 cast.destVcClass=[YYTwoViewController class];133 YYCommonItem *more=[YYCommonItem itemWithTitle:@"更多" icon:@"more"];134 135 group.items=@[video,music,movie,cast,more];136 }137 138 139 #pragma mark-tableView的代理140 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView141 {142 return self.groups.count;143 }144 145 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section146 {147 YYCommonGroup *group=self.groups[section];148 return group.items.count;149 }150 151 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath152 {153 //1.获取cell154 YYCommonCell *cell=[YYCommonCell cellWithTablView:tableView];155 //2.设置cell的显示数据156 YYCommonGroup *group=self.groups[indexPath.section];157 YYCommonItem *item=group.items[indexPath.row];158 cell.item=item;159 [cell setindexPath:indexPath rowsInSection:group.items.count];160 //3.返回cell161 return cell;162 }163 164 #pragma mark-点击cell的代理方法165 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath166 {167 //1.取出这行对应的item模型168 YYCommonGroup *group=self.groups[indexPath.section];169 YYCommonItem *item=group.items[indexPath.row];170 171 //2.判断有无需要跳转的控制器172 if (item.destVcClass) {173 UIViewController *desrVc=[[item.destVcClass alloc]init];174 desrVc.title=item.title;175 [self.navigationController pushViewController:desrVc animated:YES];176 }177 }178 @end
实现效果(点击电影cell,跳转到one控制器界面,点击播客cell跳转到two控制器界面):
3.还有一种情况,就是点击了cell之后是执行一段代码(并不一定是跳转,可能是弹出一个框等)
对于这种情况,可以使用block代码段来实现。
示例代码:
1 #import <Foundation/Foundation.h> 2 3 @interface YYCommonItem : NSObject 4 /**图标*/ 5 @property(nonatomic,copy)NSString *icon; 6 /**标题*/ 7 @property(nonatomic,copy)NSString *title; 8 /**子标题*/ 9 @property(nonatomic,copy)NSString *subtitle;10 /**右边显示的提醒数字*/11 @property(nonatomic,strong)NSString *badgeValue;12 //点击这行cell,需要跳转到哪个控制器13 @property(nonatomic,assign)Class destVcClass;14 /**封装点击这行cell想做的事情*/15 /**注意:block一定要使用copy*/16 @property(nonatomic,copy) void (^operation)();17 18 +(instancetype)itemWithTitle:(NSString *)title icon:(NSString *)icon;19 +(instancetype)itemWithTitle:(NSString *)title;20 @end
设置点击找人这个cell执行的代码段(打印找人):
在cell的点击事件代理方法中进行处理:
1 #pragma mark-点击cell的代理方法 2 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 3 { 4 //1.取出这行对应的item模型 5 YYCommonGroup *group=self.groups[indexPath.section]; 6 YYCommonItem *item=group.items[indexPath.row]; 7 8 //2.判断有无需要跳转的控制器 9 if (item.destVcClass) {10 UIViewController *desrVc=[[item.destVcClass alloc]init];11 desrVc.title=item.title;12 [self.navigationController pushViewController:desrVc animated:YES];13 }14 15 //3.判断有无需要执行的代码段16 if (item.operation) {17 item.operation();18 }19 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。