当前位置: 萬仟网 > IT编程>移动开发>IOS > iOS实现列表折叠效果

iOS实现列表折叠效果

2020年06月23日  | 萬仟网IT编程  | 我要评论

本文实例为大家分享了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 uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
Copyright © 2020  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com