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

【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.dtcms.com/a/360857.html

相关文章:

  • 量子電腦組裝
  • FunASR开源部署中文实时语音听写服务(CPU)
  • 配送算法19 Two Fast Heuristics for Online Order Dispatching
  • windows10专业版系统安装本地化mysql服务端
  • 【Docker】Docker的容器Container、镜像Image和卷Volume对比
  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具
  • 嵌入式实时操作系统(二十五)-实时性
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • nt5inf.hash排序后前后两个共五个和nti5nf.cat文件用asn.1editor打开后导出后部分内容的对比--重要
  • Unity中多线程与高并发下的单例模式