[iOS] 折叠 cell
目录
前言
1.原理
2.折叠 cell 的点击选中
3.折叠 cell 高度的变化
4.实现效果
5.总结
前言
折叠 cell 是在 3GShare 中写过的一个小控件,这篇博客是一个小小的总结。
1.原理
在这里的核心就是我们可以通过改变按钮的 tag 值来判断我们是否应该展开还是回收,还有就是我们还可以通过代码来改变我们的 cell 的行数,并且可以通过- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath这个方法来实现点击单元格的切换。
2.折叠 cell 的点击选中
- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
// [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
// [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {if (indexPath.section == 1) {self.selectedItem = self.dataArray[indexPath.row];[self toggleFold];}
}
我在这里使用了一个函数来封装我的 cell 的收缩和展开,因为在点击按钮和点击表格都要实现切换。
3.折叠 cell 高度的变化
在这里我会给出通过按钮 tag 值来改变 tableView 的高度的点击函数。
- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
// [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
// [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}
4.实现效果
5.总结
这里我给出完整的代码
#import "ViewController.h"@interface ViewController () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataArray;
@property (nonatomic, strong) UIButton *zhedie;
@property (nonatomic, strong) NSString *selectedItem;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.dataArray = [NSMutableArray arrayWithObjects:@"cell1", @"cell2", @"cell3", nil];self.selectedItem = self.dataArray.firstObject;// tableViewself.tableView = [[UITableView alloc] initWithFrame:CGRectMake(270, 200, 95, 20)style:UITableViewStylePlain];self.tableView.delegate = self;self.tableView.dataSource = self;[self.view addSubview:self.tableView];self.zhedie = [UIButton buttonWithType:UIButtonTypeSystem];self.zhedie.frame = CGRectMake(270 + 95, 200, 40, 20);self.zhedie.backgroundColor = [UIColor clearColor];
// [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];[self.zhedie setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[self.zhedie addTarget:self action:@selector(pressUp:) forControlEvents:UIControlEventTouchUpInside];self.zhedie.tag = 1001;
}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return (self.zhedie.tag == 1001) ? 1 : 2;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {if (self.zhedie.tag == 1001) {return 1;} else {if (section == 0) return 1;return self.dataArray.count;}
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {return 20;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *cellID = @"ID";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];}if (self.zhedie.tag == 1001) {cell.textLabel.text = self.selectedItem;} else {if (indexPath.section == 0) {cell.textLabel.text = self.selectedItem;cell.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1];} else {cell.textLabel.text = self.dataArray[indexPath.row];cell.backgroundColor = [UIColor whiteColor];}}cell.textLabel.font = [UIFont systemFontOfSize:12.0];return cell;
}
- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
// [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
// [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {if (indexPath.section == 1) {self.selectedItem = self.dataArray[indexPath.row];[self toggleFold];}
}
@end