[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.pswp.cn/bicheng/95954.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的组复制(MGR)高可用集群搭建

一、MySQL 组复制&#xff08;MGR&#xff09;核心概念 MySQL Group Replication&#xff08;简称 MGR&#xff09;是 MySQL 官方推出的 高可用&#xff08;HA&#xff09; 强一致性 解决方案&#xff0c;基于改进的 Paxos 协议实现&#xff0c;核心能力可概括为 3 点&#xf…

使用Shell脚本实现Linux系统资源监控邮件告警

前言 1. 问题背景与需求 2. Bash 脚本监控资源 3. Bash 脚本判断阈值 4. 配置 msmtp 发送邮件 4.1 安装 msmtp 4.2 创建配置文件 /etc/msmtprc 5. 发送邮件 5.1 给别人发邮件 6. 完整示例脚本 7. 测试方法 8. 常见问题解答 9. 总结 前言 在运维过程中&#xff0c…

设计整体 的 序分(三“释”)、正宗分(双“门”)和流通分(统一的通行表达式) 之3 “自明性”(腾讯元宝 之2)

Q&AQ11、可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容Q11.1、我刚才说“可能还需要补充 魂轴、体轴 和 中心轴 并行 上升 的内容” 是指的 我们今天前面讨论 得出的整体设计 的一个概念整体 的一个双螺旋上升结构中的三个轴。 您刚才是这样 理解的吗&#xff1f;…

使用Ansible自动化部署Hadoop集群(含源码)--环境准备

现在我们有5台虚拟机&#xff0c;已经配置好了主机名和网络我们的目标是通过Ansible实现自动化部署hadoop集群。在此之前&#xff0c;我们先编写一个shell脚本来配置hadoop集群的环境&#xff0c;包括安装软件、安装配置Ansible&#xff08;一个主节点四个工作节点&#xff09;…

C#海康车牌识别实战指南带源码

C#海康车牌识别实战指南带源码前言车牌识别技术在智能交通、停车场管理等领域有着广泛的应用。海康威视作为国内领先的安防厂商&#xff0c;其车牌识别相机提供了丰富的SDK接口供开发者使用。本文将详细介绍如何使用C#语言结合海康威视SDK实现车牌识别功能&#xff0c;并解析关…

智慧能源新范式:数字孪生平台如何驱动风电场的精细化管理?

摘要你有没有想过&#xff0c;一座风力发电场背后&#xff0c;藏着一个“看不见的孪生兄弟”&#xff1f;它能提前预知风机故障&#xff0c;实时模拟极端天气的影响&#xff0c;甚至能“训练”运维人员在虚拟场景中演练抢修。这就是数字孪生——一个让风电场从“靠经验管理”转…

STM32-FreeRTOS操作系统-任务管理

引言 随着嵌入式技术的飞速发展&#xff0c;STM32与FreeRTOS的融合愈发紧密。本文聚焦于STM32平台下FreeRTOS操作系统的任务管理&#xff0c;旨在为开发者提供清晰的思路与实用的技巧&#xff0c;助力高效开发。 为什么要进行任务管理&#xff1f; 在嵌入式系统中&#xff0c;…

工业领域 ACP 协议全解析:从入门到实战案例

工业领域 ACP 协议全解析&#xff1a;从入门到实战案例 文章目录工业领域 ACP 协议全解析&#xff1a;从入门到实战案例一、前言二、ACP 协议是什么&#xff1f;1. 基本定义2. 与数据传输协议的区别三、ACP 协议的核心功能1. 身份认证&#xff08;Authentication&#xff09;2.…

计算机组成原理:计算机硬件的基本组成

&#x1f4cc;目录&#x1f5a5;️ 计算机硬件的基本组成&#xff1a;从经典到现代的架构演进&#x1f9e9; 一、计算机硬件的五大部分&#xff1a;功能与协同&#x1f4e5; &#xff08;一&#xff09;输入设备&#xff1a;人机交互的“入口”&#x1f4e4; &#xff08;二&am…

AI歌手功能终于上线!Suno AI 带你保存歌曲的灵魂

当我们谈论一首歌时&#xff0c;究竟是什么让它“独一无二”&#xff1f;是主唱的声音质感&#xff1f;是旋律里的氛围&#xff1f;还是那种无法复制的风格气息&#xff1f; 如今&#xff0c;Suno AI 给出了答案—— AI歌手功能正式上线&#xff01; &#x1f31f;什么是「AI…

Dubbo3.3 Triple协议处理东西向流量

前言 Apache Dubbo 3.3 对 Triple 协议做了升级&#xff0c;现在 Dubbo 不仅可以处理东西向流量&#xff0c;也可以处理南北向流量。 **东西向流量&#xff08;East-West Traffic&#xff09; ** 指数据中心或网络内部同级设备/服务之间的通信。例如&#xff0c;微服务之间的…

操作系统核心特点详解:从并发到分布式,一文搞懂考研必备知识

操作系统核心特点详解&#xff1a;从并发到分布式&#xff0c;一文搞懂考研必备知识 大家好&#xff0c;今天咱们来聊聊操作系统&#xff08;OS&#xff09;这个计算机世界的“大管家”。想象一下&#xff0c;你的电脑就像一个忙碌的厨房&#xff0c;操作系统就是那个厨师长&am…

2025精选5款AI视频转文字工具,高效转录秒变文字!

视频转文本的需求早已渗透到生活的方方面面&#xff1a;网课学习需要提取课件台词、会议记录想快速整理要点、追剧时急需生肉转字幕…… 手动记录不仅费时&#xff0c;还容易遗漏关键信息。今天就分享5款实用工具&#xff0c;从免费到专业全覆盖&#xff0c;几步操作就能让视频…

MyBatis Example模式SQL注入风险

在使用MyBatis逆向工程生成的Example查询模式时&#xff0c;很多开发者看到XML中存在${}占位符就会担心SQL注入问题。但实际上&#xff0c;存在${}并不等同于存在SQL注入风险。本文将详细分析何时会存在真正的注入风险。 存在SQL注入的两个关键前提 前提一&#xff1a;Criteria…

宝塔PostgreSQL安装pgvecto插件contrib包实现向量存储

1. 宝塔安装 首先确保你的宝塔已经安装了 PostgreSQL。 安装好后是能看到上面这个界面的。 我安装的是 16.1 版本&#xff0c;下面的教程讲的也是 16.1 版本的。 2.开放防火墙的端口号 5432 3.允许外部访问所有数据库 4.设置超级管理员用户密码 用户名默认为&#xff1a;po…

麒麟系统 doc转pdf

# 安装LibreOffice&#xff08;如果尚未安装&#xff09; sudo apt update sudo apt install libreoffice# 将DOC转换为PDF libreoffice --headless --convert-to pdf 你的文档.doc# 或者指定输出目录 libreoffice --headless --convert-to pdf --outdir /输出目录 你的文档.do…

Python实现生成矩形框、三角形框、六边形框和圆环点云

本节我们分享上节提到的不填充点云。在点云处理、计算机视觉与工业检测中&#xff0c;几何轮廓&#xff08;边框/环&#xff09;点云比实心点云更能反映物体的边缘特征、结构骨架与形貌突变区域。Python 借助 NumPy 即可快速生成矩形边框、三角形边框、六边形边框与圆环点云&am…

2025年本体论:公理与规则的挑战与趋势

摘要本文章旨在深入探讨本体论&#xff08;Ontology&#xff09;中公理&#xff08;Axioms&#xff09;与规则&#xff08;Rules&#xff09;的核心概念、技术实现、验证方法、性能评估及其在2025年的前沿趋势与挑战。公理与规则是构建严谨、一致知识模型的逻辑基石&#xff0c…

【51单片机】【protues仿真】基于51单片机PM2.5空气质量检测系统

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 一、主要功能 1、LCD1602液晶显示 2、按键​设置阈值 3、PM2.5大于阈值时启动声光警报 二、使用步骤 基于51单片机的PM2.5空气质量检测系统通常采用STC89C51/52作为核心控制器&#xff0c;结合…

【目录-单选】鸿蒙HarmonyOS开发者基础

用哪一种装饰器修饰的组件可作为页面入口组件&#xff1f;Look at the answer下面是ArkTS中类名、枚举名推荐的代码风格是 Look at the answer向服务器提交表单数据&#xff0c;以下哪种请求方式比较合适 Look at the answer使用http发起网络请求&#xff0c;需要以下哪种权限&…