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=@"10";
 93     
 94     YYCommonArrowItem *findPeople=[YYCommonArrowItem itemWithTitle:@"找人" icon:@"find_people"];
 95     findPeople.subtitle=@"名人,有意思的人尽在这里!";
 96     
 97     group.items=@[hotStatus,findPeople];
 98 }
 99 
100 -(void)setupGroup1
101 {
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)setupGroup2
117 {
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=@"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 *)tableView
141 {
142     return self.groups.count;
143 }
144 
145 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
146 {
147     YYCommonGroup *group=self.groups[section];
148     return group.items.count;
149 }
150 
151 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
152 {
153     //1.获取cell
154     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.返回cell
161     return cell;
162 }
163 
164 #pragma mark-点击cell的代理方法
165 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
166 {
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 }

iOS开发项目篇—52cell点击事件的处理,,5-wow.com

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