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

「iOS」折叠cell

iOS学习

  • 前言
  • 简单的折叠cell
    • 效果
    • 原理
  • 稍作修改
  • 总结

前言

在暑期仿写中,3G share项目里我们简单的使用了折叠cell。现在写一篇博客来总结该方法。


简单的折叠cell

效果

先看效果:
请添加图片描述

原理

将cell的高度设置为一个单元格的高度。创建一个按钮,点击按钮时,自定义cell的高度展开,使cell的高度变为展示所有单元格的高度。点击单元格后重新将cell的高度变为单个单元格的高度,也就实现了cell的折叠。下面给出代码实现。

首先将tableView的高度设置为只能容纳一个单元格的高度。

 self.tableView0 = [[UITableView alloc] initWithFrame:CGRectMake(250, 200, 120, 40) style:UITableViewStylePlain];

添加按钮,并且为其加入响应事件更改tableView的高度。即可实现cell的展开。

-(void) pressbtn_switch:(UIButton *)btn
{
    btn.selected = !btn.selected;
    if (btn.selected == YES) {
        self.tableView0.frame = CGRectMake(250, 200, 120, 40*4);
    } else {
        self.tableView0.frame = CGRectMake(250, 200, 120, 40);
    }
}

此后,我们使用- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法,即可实现点击单元格,选中后更替折叠cell中的内容。
需要注意的是:我们需要保留原来单元格所展示的内容,只是进行更换。所以此处先获得我们点击的单元格,再用字符串保留单元格的文本内容。
遍历数组,找到我们点击的单元格,更换第一个单元格和点击单元格的内容,最后维护tableView的高度以实现折叠。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    VCUpload_foldCell* cell = [self.tableView0 cellForRowAtIndexPath:indexPath];
    NSString* str = [NSString stringWithString:cell.label.text];
    for (int i = 0; i < 4; i++) {
        if ([str isEqualToString:self.nsarray[i]]) {
            self.nsarray[i] = self.nsarray[0];
            break;
        }
    }
    self.nsarray[0] = str;
    self.btn_switch.selected = !self.btn_switch;
    if (self.btn_switch.selected == YES) {
        self.tableView0.frame = CGRectMake(250, 200, 120, 40*4);
    } else {
        self.tableView0.frame = CGRectMake(250, 200, 120, 40);
    }
    [self.tableView0 reloadData];
}

稍作修改

如果每次更改单元格的内容,都交换数组的位置,稍微显得不人性化。因此可以将单元格的内容多设置一个,将第一个单元格固定展示内容。并且在
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中,加入判断使选中的单元格变色,实现如下效果。
请添加图片描述

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *str = @"VCUpload_foldCell";
    VCUpload_foldCell *cell = [self.tableView0 dequeueReusableCellWithIdentifier:str];
    cell.label.text = self.nsarray[indexPath.row];
    cell.label.backgroundColor = [UIColor whiteColor];
    if (indexPath.row > 0 && [cell.label.text isEqualToString:self.nsarray[0]]) {
        cell.label.backgroundColor = [UIColor colorWithRed:47/255.0f green:134/255.0f blue:196/255.0f alpha:1.0];;
    }
    return cell;
}

总结

对折叠cell的简单原理总结,该UI的设计还是需要对单元格有熟练的基础,才能设计出好看的折叠cell。


http://www.kler.cn/a/301070.html

相关文章:

  • 数据结构(一)链表
  • vue 常用特性 ( 计算属性 | 侦听器 | 过滤器 )
  • 详细分析ipvsadm负载均衡的命令
  • Android开发实战班 - Activity 生命周期
  • R语言基础入门详解
  • React解决保存less文件后会自动生成css文件的方法
  • 【STM32】VOFA+上位机 PID调参
  • 论文翻译:arxiv-2022 Ignore Previous Prompt: Attack Techniques For Language Models
  • Flood Fill算法
  • 如何判断IP地址是否异常?
  • android14多屏幕帧率刷新率统计显示开发及成果展示
  • 如何打造一款成功的游戏
  • OPENAIGC开发者大赛企业组银奖 | Gambit-AI智能合同审核助手
  • 测试开发基础——软件测试中的bug
  • MME-RealWorld:您的多模态大型语言模型能挑战高分辨率的真实世界场景吗?这些场景对人类来说都非常困难!
  • OpenCV结构分析与形状描述符(9)检测轮廓相对于其凸包的凹陷缺陷函数convexityDefects()的使用
  • 【重学 MySQL】二十、运算符的优先级
  • 相亲交友程序系统开发产品分析
  • 小样本目标定位:Few-shot Object Localization
  • 万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!
  • 【SQL】在SQL中,行转列
  • C++的三大特性,简易说明
  • 利用命令模式构建高效的手游后端架构
  • 使用mingw64 编译 QT开发流程
  • 快速上手 | 数据可观测性平台 Datavines 自定义SQL规则使用指南
  • Android Studio 2024最新版Hello World