折叠cell
文章目录
- 折叠cell
- 前言
- 示例
- 代码部分
- 实现思路
- 核心内容
前言
笔者在暑假的3GShare的项目中就写了有关折叠cell的内容,这里笔者重新讲一下相关内容。
示例
这里先给出效果图,这里是我们的折叠cell的最后的实现效果,下面来讲解一下相关代码。
代码部分
实现思路
这里解释一下每一个步骤,这里我们实现折叠cell的核心内容就是通过仅仅展示第一行cell的内容,这里的frame我们设置起初设置成一行的cell的大小,然后我们通过设置- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
这个协议函数来修改我们的frame让点击后可以展现所有的cell。
核心内容
我们在这里要实现的重要部分在于我们的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
这个协议函数内部的内容
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString* str = _array[indexPath.section];//找到对应的cell
[_array removeObjectAtIndex:indexPath.section];//移除元素
[_array insertObject:str atIndex:0];//插入元素到第一个位置
[self.tableView reloadData];//重新加载数据
[self press:self.btn];
}
-(void)press:(UIButton*)btn {
if (btn.selected) {
self.tableView.frame = CGRectMake(200, 300, 100, 30);
} else {
self.tableView.frame = CGRectMake(200, 300, 100, 150);
}
btn.selected = !btn.selected;
}
下面给出我们这部分的原理:我们因为只展现第一个cell,所以我们只用把元素移到第一个位置,然后重新加载一下tableView,然后根据按钮的当前状况来调整frame就可以了。
下面是完整代码:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = UIColor.whiteColor;
self.array = [NSMutableArray arrayWithArray:@[@"cell01",@"cell02",@"cell03",@"cell04",@"cell05"]];
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(200, 300, 100, 30) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
self.btn = [UIButton buttonWithType:UIButtonTypeCustom];
self.btn.frame = CGRectMake(280, 300, 20, 20);
[self.btn setImage:[UIImage imageNamed:@"youjiantou.png"] forState:UIControlStateNormal];
[self.btn setImage:[UIImage imageNamed:@"xiajiantou.png"] forState:UIControlStateSelected];
[self.btn addTarget:self action:@selector(press:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.btn];
// Do any additional setup after loading the view.
}
#pragma mark tableview
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 30;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
//NSLog(@"%ld", self.array.count);
return 5;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell* cell01 = [tableView dequeueReusableCellWithIdentifier:@"mycell"];
if (cell01 == nil) {
cell01 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"mycell"];
}
cell01.textLabel.text = _array[indexPath.section];
return cell01;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString* str = _array[indexPath.section];
[_array removeObjectAtIndex:indexPath.section];
[_array insertObject:str atIndex:0];
[self.tableView reloadData];
[self press:self.btn];
}
-(void)press:(UIButton*)btn {
if (btn.selected) {
self.tableView.frame = CGRectMake(200, 300, 100, 30);
} else {
self.tableView.frame = CGRectMake(200, 300, 100, 150);
}
btn.selected = !btn.selected;
}
折叠cell的demo