折叠cell的学习
折叠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