国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

iOS開發中TableView類似QQ分組的折疊與展開效果

2019-12-12 04:11:05
字體:
來源:轉載
供稿:網友

類似QQ分組的樣子,實現tableView的折疊與展開。其實要做這個效果我先想到的是在tableView中再嵌套多個tableView,這個想法實現起來就有點難了。

所以還是換個思路,把tableView的HeaderView用上了。給headerView加上手勢,輕松解決折疊展開的問題。

直接上代碼吧。

@property (nonatomic, strong) UITableView *myTableView; @property (nonatomic, strong) NSMutableArray *listArray;  // 數據源@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];}// 給數據源賦值- (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]; }}// 實現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) { //根據記錄的展開狀態設置row的數量  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開發中TableView類似QQ分組的折疊與展開效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黎平县| 塘沽区| 涿鹿县| 成武县| 乌兰察布市| 长治县| 阜康市| 饶阳县| 庆云县| 曲阜市| 邵阳县| 额敏县| 贵溪市| 土默特左旗| 浠水县| 藁城市| 方山县| 汕头市| 洪洞县| 新昌县| 吴堡县| 林甸县| 武陟县| 余江县| 镇江市| 景德镇市| 浦城县| 临清市| 阿拉善盟| 建平县| 大兴区| 苗栗市| 堆龙德庆县| 昭觉县| 东山县| 西充县| 玉龙| 固原市| 科技| 西乡县| 通海县|