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
效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: C#中系统时间和UNIX时间戳互相转换
下一篇: oracle用户权限、角色管理详解