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

【iOS】折叠cell

文章目录

  • 前言
  • 代码示例
    • 按钮函数
    • 点击单元格的函数
    • 完整代码
  • 实现效果

前言

折叠cell的实现效果即为一个可点击的cell格,未点击时显示的只有最上面的那一格,可以点击后将点击的替换最上面的那格并把这个单元格恢复为只有一格的状态,主要的步骤即为在点击时设置按钮函数来调整cell的高度

代码示例

按钮函数

在点击这里,我主要设置了一个BOOL类型的实例变量,来记录每次的点击的状态,点击函数:

- (void)pressUp: (UIButton*)btn {_isFold = !_isFold;//这里必须进行状态的改变,保证两种点击的状态可以进行交换if (_isFold == NO) {[btn setImage: [UIImage imageNamed: @"left.png"] forState: UIControlStateNormal];_tableView.frame = CGRectMake(150, 200, 100, 30);} else {[btn setImage: [UIImage imageNamed: @"bottom.png"] forState: UIControlStateNormal];_tableView.frame = CGRectMake(150, 200, 100, 150);}
}

点击单元格的函数

点击时我们要记录点击时选择的单元格的字符,将这个字符插入到数组的第一个位置(其他的就相当被挤至下一个),之后再更新单元格的状态,并恢复单元格的点击前的状态:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {//获取选择字符NSString *selected = _dataArray[indexPath.section];//从整个数组移除所获取字符并插入到第一个位置  [_dataArray removeObjectAtIndex: indexPath.section];[_dataArray insertObject: selected atIndex:0];//重新加载更新单元格[_tableView reloadData];[self pressUp: _fold];
}

完整代码

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view._tableView = [[UITableView alloc] initWithFrame: CGRectMake(150, 200, 100, 150) style: UITableViewStylePlain];_tableView.delegate = self;_tableView.dataSource = self;_dataArray = [NSMutableArray arrayWithObjects: @"1", @"2", @"3", @"4", @"5", nil];[self.view addSubview: _tableView];_fold = [UIButton buttonWithType: UIButtonTypeSystem];_fold.frame = CGRectMake(150 + 100, 200, 20, 30);_fold.backgroundColor = [UIColor whiteColor];[_fold setImage: [UIImage imageNamed: @"left.png"] forState: UIControlStateNormal];[_fold addTarget: self action: @selector(pressUp:) forControlEvents: UIControlEventTouchUpInside];_isFold = NO;[self.view addSubview: _fold];if (_isFold == NO) {_tableView.frame = CGRectMake(150, 200, 100, 30);}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSString *selected = _dataArray[indexPath.section];[_dataArray removeObjectAtIndex: indexPath.section];[_dataArray insertObject: selected atIndex:0];[_tableView reloadData];[self pressUp: _fold];
}
- (void)pressUp: (UIButton*)btn {_isFold = !_isFold;if (_isFold == NO) {[btn setImage: [UIImage imageNamed: @"left.png"] forState: UIControlStateNormal];_tableView.frame = CGRectMake(150, 200, 100, 30);} else {[btn setImage: [UIImage imageNamed: @"bottom.png"] forState: UIControlStateNormal];_tableView.frame = CGRectMake(150, 200, 100, 150);}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *strID = @"ID";UITableViewCell *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: 20];cell.textLabel.textAlignment = NSTextAlignmentCenter;return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return 1;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {return 30;
}

实现效果

请添加图片描述

http://www.xdnf.cn/news/19591.html

相关文章:

  • 《青衣剑客 · Claude》连载
  • 总线矩阵的原理
  • 如何将多个Excel报表合并为一个汇总文件?
  • N32G43x Bootloader 中 ENV 区的管理与实现
  • 前缀和(优化算法)
  • ClickHouse常见问题——ClickHouseKeeper配置listen_host后不生效
  • 面试 TOP101 动态规划专题题解汇总Java版(BM62 —— BM82)
  • 二、SVN基础命令速查表
  • leetcode 1792. 最大平均通过率 中等
  • 通过 select into outfile / load data infile 进行数据导入导出学习笔记
  • 开源项目_金融分析工具TradingAgents
  • 01数据结构-红黑树
  • python 数据类型【python进阶一】
  • java设计模式一、单例模式
  • 【K8s】整体认识K8s之Configmap、Secret/ResourceQuota资源配额/访问控制
  • Linux应用开发-windows,linux环境下相关工具
  • Adobe Illustrator 2025最新破解教程下载安装教程,Illustrator2025最新版下载
  • AI 安全与伦理:当大模型拥有 “决策能力”,我们该如何建立技术边界与监管框架?
  • 新手向:前端开发中的常见问题
  • NLP大语言模型数据准备
  • 基于 DNA 的原核生物与微小真核生物分类学:分子革命下的范式重构​
  • Shell编程(二):正则表达式
  • FastK v1.1 安装与使用-生信工具59
  • Gradle vs. Maven,Java 构建工具该用哪个?
  • 喜讯!华清远见参与制定的《电子产品印制电路板可制造性设计(DFM)和可靠性设计规范》正式发布
  • 【无标题】训练、推理适用的数据类型
  • 专题:2025全球新能源汽车供应链核心领域研究报告|附300+份报告PDF、数据仪表盘汇总下载
  • 关闭页面强制清除所有循环定时器
  • ES6手录02-字符串与函数的扩展
  • Kotlin 协程异步任务工具类:高效处理异步操作与超时控制