iOS开发之tableView cell的展开收回功能实现代码
程序员文章站
2023-12-16 15:13:22
一、实现方法
例如好友分组,分为好友和陌生人两组,实现点击好友和陌生人展开或收回该分组对应的cell的功能。
实现:可以分组对应tableview的section,...
一、实现方法
例如好友分组,分为好友和陌生人两组,实现点击好友和陌生人展开或收回该分组对应的cell的功能。
实现:可以分组对应tableview的section,点击section展开和收回cell。
创建一个临时数组selectedarr存储需要展开的section。点击section是判断selectedarr是否包含该组,如果包含则移除,不包含则添加到selectedarr。
展示selectedarr包含组的cell。
二、代码实现
#import "zcellgroupcontroller.h" @interface zcellgroupcontroller ()<uitableviewdelegate, uitableviewdatasource> @property (nonatomic, strong) uitableview *tableview; @property (nonatomic, strong) nsarray *titlearray;//分组 @property (nonatomic, strong) nsarray *friendsarray;//每组对应内容 @property (nonatomic, strong) nsmutablearray *selectedarr;//存储需要展开的cell组 @end @implementation zcellgroupcontroller -(void)viewdidload { [super viewdidload]; self.selectedarr = [[nsmutablearray alloc]init]; [self addtableview]; [self adddata]; } - (void)addtableview{ uitableview *tableview = [[uitableview alloc]initwithframe:cgrectmake(0, 0, kscreenwidth, kscreenheight) style:uitableviewstylegrouped]; self.tableview = tableview; tableview.delegate = self; tableview.datasource = self; tableview.separatorstyle = uitableviewcellseparatorstylesingleline; [self.view addsubview:_tableview]; } - (void)adddata{ self.titlearray = [nsarray arraywithobjects:@"好友",@"陌生人", nil]; self.friendsarray = [nsarray arraywithobjects: @[@"a",@"b",@"c",@"d",@"e",@"f"], @[@"陌生1",@"陌生2",@"陌生3",@"陌生4",@"陌生5",@"陌生6",@"陌生7",@"陌生8",@"陌生9",@"陌生10",@"陌生11",@"陌生12",@"陌生13",@"陌生14"],nil]; } #pragma mark --tableviewdelegate - (nsinteger)numberofsectionsintableview:(uitableview *)tableview{ return self.titlearray.count; } - (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section{ nsstring *sectionstr = [nsstring stringwithformat:@"%ld",(long)section]; nsinteger num ; //如果selectedarr不包含section,该分组返回number为0; if ([self.selectedarr containsobject:sectionstr]) { nsarray *arraydata = self.friendsarray[section]; num = arraydata.count ; }else{ num = 0; } return num; } - (cgfloat)tableview:(uitableview *)tableview heightforheaderinsection:(nsinteger)section{ return 40; } - (uiview *)tableview:(uitableview *)tableview viewforheaderinsection:(nsinteger)section{ uiview *view = [[uiview alloc]initwithframe:cgrectmake(0, 0, kscreenwidth, 40)]; view.backgroundcolor = [uicolor whitecolor]; uilabel *titlelabel = [[uilabel alloc]initwithframe:cgrectmake(10, 5,kscreenwidth-20 , 30)]; titlelabel.text = self.titlearray[section]; [view addsubview:titlelabel]; //添加点击事件 uibutton *btn = [[uibutton alloc]initwithframe:cgrectmake(0, 0, kscreenwidth, 40)]; btn.tag = 100+section; [btn addtarget:self action:@selector(viewbtnclick:) forcontrolevents:uicontroleventtouchupinside]; [view addsubview:btn]; return view; } - (void)viewbtnclick:(uibutton *)btn{ nsstring *string = [nsstring stringwithformat:@"%ld",btn.tag - 100]; if ([self.selectedarr containsobject:string]) { [self.selectedarr removeobject:string]; }else{ [self.selectedarr addobject:string]; } nslog(@"selectedarr:%@",self.selectedarr); [_tableview reloaddata]; } - (cgfloat)tableview:(uitableview *)tableview heightforfooterinsection:(nsinteger)section{ return 10; } - (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath{ nsstring *sectionstr = [nsstring stringwithformat:@"%ld",(long)indexpath.section]; static nsstring *cellid = @"testcellid"; uitableviewcell *cell = [tableview dequeuereusablecellwithidentifier:cellid]; if (!cell) { cell = [[uitableviewcell alloc]initwithstyle:uitableviewcellstyledefault reuseidentifier:cellid]; cell.selectionstyle = uitableviewcellselectionstylegray; } nsarray *arraydata = self.friendsarray[indexpath.section]; if ([self.selectedarr containsobject:sectionstr]) { cell.textlabel.text = arraydata[indexpath.row]; } return cell; } - (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath{ return 45; } @end
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。