iOS開發(fā)中TableView類似QQ分組的折疊與展開效果
類似QQ分組的樣子,實現(xiàn)tableView的折疊與展開。其實要做這個效果我先想到的是在tableView中再嵌套多個tableView,這個想法實現(xiàn)起來就有點難了。
所以還是換個思路,把tableView的HeaderView用上了。給headerView加上手勢,輕松解決折疊展開的問題。
直接上代碼吧。
@property (nonatomic, strong) UITableView *myTableView; @property (nonatomic, strong) NSMutableArray *listArray; // 數(shù)據(jù)源 @property (nonatomic, strong) NSMutableArray *titlesArray; // 分組的名稱 @property (nonatomic, strong) NSMutableDictionary *openSectionDict; // 記錄哪個組展開 - (void)viewDidLoad { [super viewDidLoad]; // 初始化tableView _myTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped]; self.myTableView.delegate = self; self.myTableView.dataSource = self; [self.view addSubview:_myTableView]; self.openSectionDict = [[NSMutableDictionary alloc] init]; // 初始化字典 [self setUpData]; } // 給數(shù)據(jù)源賦值 - (void)setUpData { self.listArray = [NSMutableArray new]; self.titlesArray = [NSMutableArray new]; for (int i = 0; i < 5; i++) { // 5個section [self.titlesArray addObject:[NSString stringWithFormat:@"section %d", i]]; NSMutableArray *array = [NSMutableArray new]; for (int i = 0; i < 4; i++) { // 每個section有4個row [array addObject:[NSString stringWithFormat:@"row %d", i]]; } [self.listArray addObject:array]; } } // 實現(xiàn)tableView的代理方法 #pragma mark - tableView dataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 5; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if ([[self.openSectionDict valueForKey:[NSString stringWithFormat:@"%ld", section]] integerValue] == 0) { //根據(jù)記錄的展開狀態(tài)設(shè)置row的數(shù)量 return 0; } else { return 4; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL_ID"]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"CELL_ID"]; cell.textLabel.text = [NSString stringWithFormat:@"row %ld", indexPath.row]; } return cell; } #pragma mark - tableView delegate - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 45; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 40; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 40)]; view.backgroundColor = [UIColor whiteColor]; view.tag = KTAG + section; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, view.bounds.size.width, view.bounds.size.height)]; label.text = self.titlesArray[section]; [view addSubview:label]; if ([[self.openSectionDict valueForKey:[NSString stringWithFormat:@"%ld", section]] integerValue] == 0) { UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, (view.bounds.size.height - 10) / 2, 7, 10)]; imageView.image = [UIImage imageNamed:@"Triangle_right_gray"]; // 三角形小圖片 [view addSubview:imageView]; } else { UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, (view.bounds.size.height - 7) / 2, 10, 7)]; imageView.image = [UIImage imageNamed:@"Triangle_down_gray"]; [view addSubview:imageView]; } UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(collegeTaped:)]; [view addGestureRecognizer:tap]; return view; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 0.1; } #pragma mark - sectionHeader clicked - (void)collegeTaped:(UITapGestureRecognizer *)sender { NSString *key = [NSString stringWithFormat:@"%ld", sender.view.tag - KTAG]; // 給展開標識賦值 if ([[self.openSectionDict objectForKey:key] integerValue] == 0) { [self.openSectionDict setObject:@"1" forKey:key]; } else { [self.openSectionDict setObject:@"0" forKey:key]; } NSUInteger index = sender.view.tag; NSIndexSet *set = [NSIndexSet indexSetWithIndex:index - KTAG]; [self.myTableView reloadSections:set withRowAnimation:UITableViewRowAnimationFade]; }
最后的效果:
以上所述是小編給大家介紹的iOS開發(fā)中TableView類似QQ分組的折疊與展開效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Android SDK Manager解決更新時的問題 :Failed to fetch URL...
本文主要介紹解決安裝使用SDK Manager更新時的問題:Failed to fetch URL...,這里提供了詳細的資料及解決問題辦法,有需要的小伙伴可以參考下2016-09-09Android使用PowerImageView實現(xiàn)播放強大的ImageView動畫效果
今天我們就來編寫一個PowerImageView控件,讓它既能支持ImageView控件原生的所有功能,同時還可以播放GIF圖片2018-05-05詳解Android Webview加載網(wǎng)頁時發(fā)送HTTP頭信息
這篇文章主要介紹了詳解Android Webview加載網(wǎng)頁時發(fā)送HTTP頭信息的相關(guān)資料,需要的朋友可以參考下2017-05-05Android開發(fā)MQTT協(xié)議的模型及通信淺析
這篇文章主要W為大家介紹了Android開發(fā)MQTT協(xié)議的模型及通信淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03