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

[iOS] 折叠 cell

目录

前言

1.原理

2.折叠 cell 的点击选中

3.折叠 cell 高度的变化

4.实现效果

5.总结


前言

折叠 cell 是在 3GShare 中写过的一个小控件,这篇博客是一个小小的总结。

1.原理

在这里的核心就是我们可以通过改变按钮的 tag 值来判断我们是否应该展开还是回收,还有就是我们还可以通过代码来改变我们的 cell 的行数,并且可以通过- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath这个方法来实现点击单元格的切换。

2.折叠 cell 的点击选中

- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
//        [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
//        [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {if (indexPath.section == 1) {self.selectedItem = self.dataArray[indexPath.row];[self toggleFold];}
}

我在这里使用了一个函数来封装我的 cell 的收缩和展开,因为在点击按钮和点击表格都要实现切换。

3.折叠 cell 高度的变化

在这里我会给出通过按钮 tag 值来改变 tableView 的高度的点击函数。

- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
//        [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
//        [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}

4.实现效果

5.总结

这里我给出完整的代码

#import "ViewController.h"@interface ViewController () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSMutableArray *dataArray;
@property (nonatomic, strong) UIButton *zhedie;
@property (nonatomic, strong) NSString *selectedItem;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.dataArray = [NSMutableArray arrayWithObjects:@"cell1", @"cell2", @"cell3", nil];self.selectedItem = self.dataArray.firstObject;// tableViewself.tableView = [[UITableView alloc] initWithFrame:CGRectMake(270, 200, 95, 20)style:UITableViewStylePlain];self.tableView.delegate = self;self.tableView.dataSource = self;[self.view addSubview:self.tableView];self.zhedie = [UIButton buttonWithType:UIButtonTypeSystem];self.zhedie.frame = CGRectMake(270 + 95, 200, 40, 20);self.zhedie.backgroundColor = [UIColor clearColor];
//    [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];[self.zhedie setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[self.zhedie addTarget:self action:@selector(pressUp:) forControlEvents:UIControlEventTouchUpInside];self.zhedie.tag = 1001;
}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return (self.zhedie.tag == 1001) ? 1 : 2;
}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {if (self.zhedie.tag == 1001) {return 1;} else {if (section == 0) return 1;return self.dataArray.count;}
}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {return 20;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString *cellID = @"ID";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];}if (self.zhedie.tag == 1001) {cell.textLabel.text = self.selectedItem;} else {if (indexPath.section == 0) {cell.textLabel.text = self.selectedItem;cell.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1];} else {cell.textLabel.text = self.dataArray[indexPath.row];cell.backgroundColor = [UIColor whiteColor];}}cell.textLabel.font = [UIFont systemFontOfSize:12.0];return cell;
}
- (void)toggleFold {if (self.zhedie.tag == 1002) {// 折叠
//        [self.zhedie setTitle:@"展开" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向左箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 20);self.zhedie.tag = 1001;} else {// 展开
//        [self.zhedie setTitle:@"折叠" forState:UIControlStateNormal];[self.zhedie setImage:[UIImage imageNamed:@"向下箭头"] forState:UIControlStateNormal];self.tableView.frame = CGRectMake(270, 200, 95, 80);self.zhedie.tag = 1002;}[self.tableView reloadData];
}
- (void)pressUp:(UIButton *)btn {[self toggleFold];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {if (indexPath.section == 1) {self.selectedItem = self.dataArray[indexPath.row];[self toggleFold];}
}
@end

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

相关文章:

  • Fiddler 实战案例解析,开发者如何用抓包工具快速解决问题
  • 鸿蒙分布式数据同步失败全解
  • jenkins使用ansible单节点lnmp
  • Nvidia Orin DK 本地 ollama 主流 20GB 级模型 gpt-oss, gemma3, qwen3 部署与测试
  • AI搜索排名规则突变:企业如何用GEO工具保持竞争力?
  • LeetCode 刷题【64. 最小路径和】
  • 无人机气象观测技术
  • 华为的 4A 架构简介
  • 代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
  • Vue基础知识-脚手架开发-初始化目录解析
  • 分布式对象存储系统 Minio 之 Centos 环境安装
  • SQLynx 3.7 发布:数据库管理工具的性能与交互双重进化
  • Java 方法:从定义调用到重载,入门到面试全攻略
  • 前端路由切换不再白屏:React/Vue 实战优化全攻略(含可运行 Demo)
  • 基于html+css+js+jquery实现轮播图(自动轮播,手动选择,翻页)
  • #T1359. 围成面积
  • 华清远见25072班I/O学习day5
  • 嵌入式硬件 - 51单片机3
  • NotePad++下载安装与设置
  • 使用a标签跳转之后,会刷新一次,这个a标签添加的样式就会消失
  • 搞懂IFNULL 和 NULLIF
  • 【C++详解】异常概念、抛出捕获与处理机制全解析
  • 一文读懂数据分类分级:企业安全治理的基石
  • 深入理解Linux进程信号机制
  • 残差神经网络的案例
  • 【面试题】LangChain与LlamaIndex核心概念详解
  • 聚焦GISBox矢量服务:数据管理、数据库连接与框架预览全攻略
  • 分布式电源接入电网进行潮流计算
  • Linux笔记---UDP套接字实战:简易聊天室
  • 服务器不支持node.js16以上版本安装?用Docker轻松部署Node.js 20+环境运行Strapi项目