当前位置: 首页 > news >正文

【iOS】折叠cell

文章目录

  • 前言
  • 一、实现效果
  • 二、折叠cell的实现原理
  • 三、实现折叠cell的高度变化
  • 四、实现选中点击的单元格
  • 总结


前言

在暑假的3GShare中用到了折叠cell控件,特此总结博客记录


一、实现效果

在这里插入图片描述

二、折叠cell的实现原理

首先我们需要知道ScrollView的是TableView的父类,我们可以通过代码来控制我们需要展示的cell的行数 ,也就是tableview的高度。
我们可以通过按钮来实现tableview的展开与关闭,并且通过- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 方法来实现我们单元格的切换

三、实现折叠cell的高度变化

既然我们已经知道实现折叠cell的关键是通过按钮控制tableview的高度,那么我们现在给出按钮点击函数

- (void)pressUp:(UIButton *)btn {if (btn.tag == 1002) {[btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];_tableView.frame = CGRectMake(270, 200, 95, 20);btn.tag--;} else {[btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];_tableView.frame = CGRectMake(270, 200, 95, 80);btn.tag++;}
}

如此一来便实现了我们点击按钮时我们展示的tableview高度会随按钮的点击而变化

四、实现选中点击的单元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {// 从_dataArray获取被选中的项目NSString *selectedItem = _dataArray[indexPath.section];// 从_dataArray中移除被选中的项目[_dataArray removeObjectAtIndex:indexPath.section];// 将被选中的项目插入到_dataArray的开头[_dataArray insertObject:selectedItem atIndex:0];// 重新加载整个UITableView的数据[_tableView reloadData];// 调用pressUp:方法,执行按钮状态的切换[self pressUp:_zhedie];
}

当选择(点击)一个单元格时,将所对应部分的数据从_dataArray中移动到数组的顶部。这在didSelectRowAtIndexPath方法中完成。然后重新加载UITableView,并调用pressUp:方法以确保正确的布局。

总结

如此一来我们便简单实现了我们的折叠cell
以下给出完整的简单折叠cell的实现代码

- (void)viewDidLoad {[super viewDidLoad];//折叠cell=======_tableView = [[UITableView alloc] initWithFrame:CGRectMake(270, 200, 95, 80) style:UITableViewStylePlain];_tableView.delegate = self;_tableView.dataSource = self;_dataArray = [NSMutableArray arrayWithObjects:@"cell1", @"cell2", @"cell3", @"cell4", nil];[self.view addSubview:_tableView];_zhedie = [UIButton buttonWithType:UIButtonTypeSystem];_zhedie.frame = CGRectMake(270 + 95, 200, 20, 20);_zhedie.backgroundColor = [UIColor whiteColor];[_zhedie setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];[_zhedie addTarget:self action:@selector(pressUp:)forControlEvents:UIControlEventTouchUpInside];_zhedie.tag = 1001;[self.view addSubview:_zhedie];if (_zhedie.tag == 1001) {_tableView.frame = CGRectMake(270, 200, 95, 20);}//=======折叠cell}}//====折叠cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return 1;
}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 4;
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {return 20;
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSString *selectedItem = _dataArray[indexPath.section];[_dataArray removeObjectAtIndex:indexPath.section];[_dataArray insertObject:selectedItem atIndex:0];[_tableView reloadData];[self pressUp:_zhedie];
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *strID = @"ID";//尝试获取可以复用的单元格//如果得不到,返回为nilUITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:strID];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strID];}//单元格文字赋值cell.textLabel.text = [_dataArray objectAtIndex:indexPath.section];cell.textLabel.font = [UIFont systemFontOfSize:12.0];cell.textLabel.textAlignment = NSTextAlignmentLeft;return cell;
}- (void)pressUp:(UIButton *)btn {if (btn.tag == 1002) {[btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];_tableView.frame = CGRectMake(270, 200, 95, 20);btn.tag--;} else {[btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];_tableView.frame = CGRectMake(270, 200, 95, 80);btn.tag++;}
}

折叠cell—demo

http://www.lryc.cn/news/150256.html

相关文章:

  • 无涯教程-Android - DatePicker函数
  • 经纬恒润荣获吉利汽车“最佳价值贡献”奖
  • 【多线程】lock与synchronized的区别
  • 什么是RTC
  • BW 源/目标模型主键不一样,增量的作用
  • HK1 RBOX X4,Vontar X4,S905 X4 刷 ATV
  • Rust 学习笔记(持续更新中…)
  • 递归算法学习——电话号码的字母组成,括号生成,组合
  • 记录 JSONObject.parseObject json对象转换 对象字段为null
  • Android Native Code开发学习(二)JNI互相传参返回调用
  • Ubuntu 下安装Qt5.12.12无法输入中文解决方法
  • 微信小程序左上角home图标的解决方法之一 层级混乱导致的home图标显示的问题 自定义左上角左侧图标的返回路径
  • Kubernetes(K8s 1.28.x)部署---超详细
  • spring高级源码50讲-20-36(springMVC)
  • Leetcode Top 100 Liked Questions(序号141~189)
  • 网络编程day3-FTP客户端项目
  • 音频母带制作::AAMS V4.0 Crack
  • 【SpringCloud】SpringCloud整合openFeign
  • 成集云 | 飞书审批同步金蝶云星空 | 解决方案
  • 【计算机组成 课程笔记】3.2 算数运算和逻辑运算的硬件实现
  • python元组的不可变性和应用场景
  • 配置化开发的核心设计 - Schema
  • HTTP协议概述
  • fastjson2 打开 AutoType
  • 封装(个人学习笔记黑马学习)
  • PyTorch 模型性能分析和优化 - 第 3 部分
  • 【力扣每日一题】2023.9.1 买钢笔和铅笔的方案数
  • 实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务
  • Kubernetes技术--k8s核心技术Pod
  • 基于Springboot实现的Echarts图表