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

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

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

上一篇:

下一篇: