一、实现方法
例如好友分组,分为好友和陌生人两组,实现点击好友和陌生人展开或收回该分组对应的cell的功能。
实现:可以分组对应tableView的section,点击section展开和收回cell。
创建一个临时数组selectedArr存储需要展开的section。点击section是判断selectedArr是否包含该组,如果包含则移除,不包含则添加到selectedArr。
展示selectedArr包含组的cell。
二、代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
#import "ZCellGroupController.h"
@interface ZCellGroupController ()<UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *titleArray; //分组
@property (nonatomic, strong) NSArray *friendsArray; //每组对应内容
@property (nonatomic, strong) NSMutableArray *selectedArr; //存储需要展开的cell组
@end
@implementation ZCellGroupController
-( void )viewDidLoad {
[super viewDidLoad];
self.selectedArr = [[NSMutableArray alloc]init];
[self addTableView];
[self addData];
}
- ( void )addTableView{
UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, kSCREENWIDTH, kScreenHeight) style:UITableViewStyleGrouped];
self.tableView = tableView;
tableView.delegate = self;
tableView.dataSource = self;
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
[self.view addSubview:_tableView];
}
- ( void )addData{
self.titleArray = [NSArray arrayWithObjects:@ "好友" ,@ "陌生人" , nil];
self.friendsArray = [NSArray arrayWithObjects:
@[@ "A" ,@ "B" ,@ "C" ,@ "D" ,@ "E" ,@ "F" ],
@[@ "陌生1" ,@ "陌生2" ,@ "陌生3" ,@ "陌生4" ,@ "陌生5" ,@ "陌生6" ,@ "陌生7" ,@ "陌生8" ,@ "陌生9" ,@ "陌生10" ,@ "陌生11" ,@ "陌生12" ,@ "陌生13" ,@ "陌生14" ],nil];
}
#pragma mark --tableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return self.titleArray.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSString *sectionStr = [NSString stringWithFormat:@ "%ld" ,( long )section];
NSInteger num ;
//如果selectedArr不包含section,该分组返回number为0;
if ([self.selectedArr containsObject:sectionStr]) {
NSArray *arrayData = self.friendsArray[section];
num = arrayData.count ;
} else {
num = 0;
}
return num;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 40;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kSCREENWIDTH, 40)];
view.backgroundColor = [UIColor whiteColor];
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 5,kSCREENWIDTH-20 , 30)];
titleLabel.text = self.titleArray[section];
[view addSubview:titleLabel];
//添加点击事件
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, kSCREENWIDTH, 40)];
btn.tag = 100+section;
[btn addTarget:self action:@selector(viewBtnClick:) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:btn];
return view;
}
- ( void )viewBtnClick:(UIButton *)btn{
NSString *string = [NSString stringWithFormat:@ "%ld" ,btn.tag - 100];
if ([self.selectedArr containsObject:string]) {
[self.selectedArr removeObject:string];
} else {
[self.selectedArr addObject:string];
}
NSLog(@ "selectedArr:%@" ,self.selectedArr);
[_tableView reloadData];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *sectionStr = [NSString stringWithFormat:@ "%ld" ,( long )indexPath.section];
static NSString *cellID = @ "testCellID" ;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
cell.selectionStyle = UITableViewCellSelectionStyleGray;
}
NSArray *arrayData = self.friendsArray[indexPath.section];
if ([self.selectedArr containsObject:sectionStr]) {
cell.textLabel.text = arrayData[indexPath.row];
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 45;
}
@end
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.jianshu.com/p/210b866b2568