iOS实现折叠单元格
本文实例为大家分享了iOS实现折叠单元格的具体代码,供大家参考,具体内容如下
思路
点击按钮或cell单元格来进行展开收缩,同时使用一个BOOL值记录单元格展开收缩状态。根据BOOL值对tableView的高度和button的image进行实时变更。
注意点:
在执行-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath(点击当前单元格)方法时,收缩单元格,显示当前点击的单元格的内容。这一步骤的实现是对存储单元格内容的可变数组进行更改。
代码
//ViewController.h中 #import@interfaceViewController:UIViewController @propertyUITableView*tableView; @propertyUIButton*button; @propertyNSMutableArray*imageViewArr; @propertyNSMutableArray*labelArr; @propertyBOOLselect;//记录单元格展开收缩状态 @end
//ViewController.m中 #import"ViewController.h" #import"ViewTableViewCell.h" #import"Masonry.h" @interfaceViewController()@end @implementationViewController -(void)viewDidLoad{ [superviewDidLoad]; self.view.backgroundColor=[UIColorcolorWithWhite:0.92alpha:1]; _imageViewArr=[[NSMutableArrayalloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; _labelArr=[[NSMutableArrayalloc]initWithObjects:@"发起群聊",@"添加朋友",@"扫一扫",@"收付款",@"帮助与反馈",nil]; _tableView=[[UITableViewalloc]init]; [self.viewaddSubview:_tableView]; _tableView.frame=CGRectMake(100,100,130,35); //以下使用Masonry对tableView进行约束,约束不是很规范可忽略 //[_tableViewmas_makeConstraints:^(MASConstraintMaker*make){ //make.height.mas_offset(self.view.frame.size.height*0.0485); //make.width.mas_offset(self.view.frame.size.width*0.335); //make.left.equalTo(self.view.mas_left).offset(self.view.frame.size.width*0.6); //make.top.equalTo(self.view.mas_top).offset(self.view.frame.size.height*0.046); // //}]; _tableView.delegate=self; _tableView.dataSource=self; [_tableViewregisterClass:[ViewTableViewCellclass]forCellReuseIdentifier:@"cell"]; _button=[UIButtonbuttonWithType:UIButtonTypeCustom]; [self.viewaddSubview:_button]; [_buttonmas_makeConstraints:^(MASConstraintMaker*make){ make.left.equalTo(_tableView.mas_right).offset(-28); make.top.equalTo(_tableView.mas_top).offset(4); make.height.mas_offset(self.view.frame.size.height*0.0495*0.68); make.width.mas_offset(self.view.frame.size.width*0.335*0.22); }]; [_buttonsetImage:[UIImageimageNamed:@"shou"]forState:UIControlStateNormal]; [_buttonaddTarget:selfaction:@selector(press)forControlEvents:UIControlEventTouchUpInside]; //默认单元格为收缩select为0 _select=0; } -(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{ return1; } -(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{ //根据select的值来判断收缩展开状态,返回相应的行数 if(_select==0){ return1; }else{ return5; } } -(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath{ return40; } -(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{ ViewTableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:@"cell"forIndexPath:indexPath]; cell.iimageView.image=[UIImageimageNamed:_imageViewArr[indexPath.row]]; cell.label.text=[NSStringstringWithString:_labelArr[indexPath.row]]; returncell; } //点击当前单元格 -(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{ //记录当前单元格的imageView和Label的内容 NSString*imageViewStr=[NSStringstringWithString:_imageViewArr[indexPath.row]]; NSString*labelStr=[NSStringstringWithString:_labelArr[indexPath.row]]; //将当前单元格的内容插入可变数组,作为第一个元素 [_imageViewArrinsertObject:imageViewStratIndex:0]; [_labelArrinsertObject:labelStratIndex:0]; //同时删除可变数组中当前单元格的原本所在位置 [_imageViewArrremoveObjectAtIndex:indexPath.row+1]; [_labelArrremoveObjectAtIndex:indexPath.row+1]; //更新tableView [_tableViewreloadData]; //调用press方法,变更tableView的高度和button的image [selfpress]; } -(void)press{ //通过判断select的值,判断单元格的展开与收缩,更改tableView的高度和button的image if(_select==0){ _select=1; _tableView.frame=CGRectMake(100,100,130,200); //以下使用masonry对tableView进行更新约束(以下代码为更新tableView的高度) //[_tableViewmas_updateConstraints:^(MASConstraintMaker*make){ //make.height.mas_offset(200); //}]; [_buttonsetImage:[UIImageimageNamed:@"kai"]forState:UIControlStateNormal]; }else{ _select=0; _tableView.frame=CGRectMake(100,100,130,35); //[_tableViewmas_updateConstraints:^(MASConstraintMaker*make){ //make.height.mas_offset(self.view.frame.size.height*0.0485); //}]; [_buttonsetImage:[UIImageimageNamed:@"shou"]forState:UIControlStateNormal]; } [_tableViewreloadData]; } @end
//ViewTableViewCell.h中 #importNS_ASSUME_NONNULL_BEGIN @interfaceViewTableViewCell:UITableViewCell @propertyUIImageView*iimageView; @propertyUILabel*label; @end
//ViewTableViewCell.m中 #import"ViewTableViewCell.h" @implementationViewTableViewCell -(instancetype)initWithStyle:(UITableViewCellStyle)stylereuseIdentifier:(NSString*)reuseIdentifier{ self=[superinitWithStyle:stylereuseIdentifier:reuseIdentifier]; _iimageView=[[UIImageViewalloc]init]; [self.contentViewaddSubview:_iimageView]; _label=[[UILabelalloc]init]; [self.contentViewaddSubview:_label]; returnself; } -(void)layoutSubviews{ [superlayoutSubviews]; _iimageView.frame=CGRectMake(5,5,25,25); _label.frame=CGRectMake(37,5,80,25); _label.font=[UIFontsystemFontOfSize:15]; } @end
效果图如下
初始状态
点击cell或点击按钮,显示如下:
点击任意cell,例如点击扫一扫,单元格收回,如图
再次展开单元格,cell的内容如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。