1. 程式人生 > 程式設計 >iOS實現列表摺疊效果

iOS實現列表摺疊效果

本文例項為大家分享了iOS實現列表摺疊效果的具體程式碼,供大家參考,具體內容如下

實現列表摺疊效果其實比較簡單,點選列表頭部的時候,把返回列表行數設為 0,就是收起列表;再次點選列表頭部,顯示列表的行數,就展開了列表。

#import "TableDownUpVC.h"
#import "TableViewCell_TableSelect.h"

@interface TableDownUpVC ()
{
  NSMutableDictionary *dicSelet;
  NSArray *arrData;
  NSMutableArray *arrStatus;
  NSInteger selectFlag;

  NSMutableDictionary *dictShow;
}

@property (nonatomic,strong) UIImageView *imgArror;

@end

@implementation TableDownUpVC

- (void)viewDidLoad {
  [super viewDidLoad];
  self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
  self.title = @"列表摺疊效果";

  dictShow = [[NSMutableDictionary alloc] init];
  arrStatus = [[NSMutableArray alloc] init];

  NSDictionary *dict0 = @{@"section":@"頭部0",@"content":@[@{@"title":@"Section0",@"subTitle":@"Row0",@"avator":@"user_default_blue"},@{@"title":@"Section0",@"subTitle":@"Row1",@"subTitle":@"Row2",@"avator":@"user_default_blue"}]};

  NSDictionary *dict1 = @{@"section":@"頭部1",@"content":@[@{@"title":@"Section1",@{@"title":@"Section1",@"avator":@"user_default_blue"}]};

  NSDictionary *dict2 = @{@"section":@"頭部2",@"content":@[@{@"title":@"Section2",@{@"title":@"Section2",@"avator":@"user_default_blue"}]};

  arrData = @[dict0,dict1,dict2];

  dicSelet = [[NSMutableDictionary alloc] init];

  //初始化選中狀態(預設都不選擇)
  for (NSInteger i=0; i<arrData.count; i++) {
    NSArray *content = arrData[i][@"content"];
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    for (NSInteger j=0; j<content.count; j++) {
      [dict setObject:@"0" forKey:STR_NUM(j)];
    }
    [arrStatus addObject:dict];
  }

  //初始化列表頭部摺疊狀態
  for (NSInteger i=0; i<arrData.count; i++) {
    [dictShow setObject:@"0" forKey:STR_NUM(i)];
  }
}

#pragma mark - TableViewDataSource,UITableViewDelegate 擴充套件

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  return arrData.count;
}

- (NSInteger)tableViewEx:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  NSString *isShow = dictShow[STR_NUM(section)];
  if ([isShow isEqualToString:@"0"]) {
    NSArray *arr = arrData[section][@"content"];
    return arr.count;
  } else {
    return 0;
  }
}

- (CGFloat)tableViewEx:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return 60;
}

- (UITableViewCell *)tableViewEx:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString * identifier = @"cellIdentifier";
  TableViewCell_TableSelect *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  cell.selectionStyle = UITableViewCellSelectionStyleNone;
  if (cell == nil) {
    cell = [[TableViewCell_TableSelect alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
  }
  [cell setDictInfo:arrData[indexPath.section][@"content"][indexPath.row]];
  [cell setAccessoryImage:arrStatus[indexPath.section][STR_NUM(indexPath.row)]];

  return cell;
}

- (void)tableViewEx:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSMutableDictionary *dict = arrStatus[indexPath.section];
  NSString *str = dict[STR_NUM(indexPath.row)];
  if ([str isEqualToString:@"0"]) {
    [dict setValue:@"1" forKey:STR_NUM(indexPath.row)];
  } else {
    [dict setValue:@"0" forKey:STR_NUM(indexPath.row)];
  }
  [self.tableView reloadData];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  return 50;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
  return 10;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{

  UIView *headerView = [UICommonCtrl commonViewWithFrame:CGRectMake(0,SCREEN_WIDTH,50) color:kColor_White];

  UILabel *title = [UICommonCtrl commonLabelWithFrame:CGRectMake(10,15,200,20)
                          text:arrData[section][@"section"]
                         color:kColor_Black
                          font:kFont_Large
                     textAlignment:NSTextAlignmentLeft];
  [headerView addSubview:title];

  _imgArror = [UICommonCtrl commonImageViewWithFrame:CGRectMake(SCREEN_WIDTH-20,22.5,10,5) image:nil];
  [headerView addSubview:_imgArror];

  NSString *str = [dictShow objectForKey:STR_NUM(section)];
  if ([str isEqualToString:@"0"]) {
    _imgArror.image = [UIImage imageNamed:@"icon_down"];
  } else {
    _imgArror.image = [UIImage imageNamed:@"icon_up"];
  }

  @weakify(self)
  UIButton *btn = [UICommonCtrl commonButtonWithFrame:CGRectMake(0,50)
                          text:@""
                         color:kColor_Black
                          font:kFont_Large
                    backgroundImage:nil
                         block:^(UIButton *btn) {
                           @strongify(self)
                           NSString *str = [dictShow objectForKey:STR_NUM(section)];
                           if ([str isEqualToString:@"0"]) {
                             [dictShow setValue:@"1" forKey:STR_NUM(section)];
                           } else {
                             [dictShow setValue:@"0" forKey:STR_NUM(section)];
                           }
                           [self refreshSection:section];

                         }];
  [headerView addSubview:btn];


  for (NSInteger i=0; i<2; i++) {
    UIView *line = [UICommonCtrl commonLineViewWithFrame:CGRectMake(0,(50-LINE_SIZE)*i,LINE_SIZE) color:kColor_Line];
    [headerView addSubview:line];
  }

  return headerView;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
  UIView *footerView = [UICommonCtrl commonViewWithFrame:CGRectMake(0,10) color:kColor_Background];
  return footerView;
}

- (void)refreshSection:(NSInteger)section
{
  NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:section];
  [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
}

@end

效果圖

iOS實現列表摺疊效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。