目錄
前言
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