欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

iOS实现列表折叠效果

程序员文章站 2023-11-22 14:51:34
本文实例为大家分享了ios实现列表折叠效果的具体代码,供大家参考,具体内容如下实现列表折叠效果其实比较简单,点击列表头部的时候,把返回列表行数设为 0,就是收起列表;再次点击列表头部,显示列表的行数,...

本文实例为大家分享了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",@"avator":@"user_default_blue"},
           @{@"title":@"section0",@"subtitle":@"row2",@"avator":@"user_default_blue"}]};

 nsdictionary *dict1 = @{@"section":@"头部1",
       @"content":@[@{@"title":@"section1",@"subtitle":@"row0",@"avator":@"user_default_blue"},
           @{@"title":@"section1",@"subtitle":@"row1",@"avator":@"user_default_blue"},
           @{@"title":@"section1",@"subtitle":@"row2",@"avator":@"user_default_blue"}]};

 nsdictionary *dict2 = @{@"section":@"头部2",
       @"content":@[@{@"title":@"section2",@"subtitle":@"row0",@"avator":@"user_default_blue"},
           @{@"title":@"section2",@"subtitle":@"row1",@"avator":@"user_default_blue"},
           @{@"title":@"section2",@"subtitle":@"row2",@"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, 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, 0, screen_width, 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, screen_width, line_size) color:kcolor_line];
  [headerview addsubview:line];
 }

 return headerview;
}

- (uiview *)tableview:(uitableview *)tableview viewforfooterinsection:(nsinteger)section
{
 uiview *footerview = [uicommonctrl commonviewwithframe:cgrectmake(0, 0, screen_width, 10) color:kcolor_background];
 return footerview;
}

- (void)refreshsection:(nsinteger)section
{
 nsindexset *indexset=[[nsindexset alloc]initwithindex:section];
 [self.tableview reloadsections:indexset withrowanimation:uitableviewrowanimationfade];
}

@end

效果图

iOS实现列表折叠效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: iOS 列表 折叠