首页 > 其他分享 >【iOS】折叠cell

【iOS】折叠cell

时间:2024-09-04 12:54:05浏览次数:12  
标签:indexPath tableView tableview 折叠 iOS cell btn self

折叠cell

前言

暑假在仿写3G share时使用到了折叠cell,故而现在来总结一下折叠cell,如有不足,还望指正。

实现原理

在OC中,scrollview是tableview的父类,要想实现折叠cell的效果,我们需要控制在点击按钮前后,tableview的高度变换,同时在点击cell时,将点击的cell放在数组的第一个元素,同时收回展示的cell即可。这样我们就可以实现cell的切换。

代码实现

这里先展示实现的效果:
在这里插入图片描述

原理讲解

折叠cell其实就是通过按钮控制tableview的大小,在每次点击显示的单独的一个cell的时候,将整个tableview显示出来,在点击非第一个cell的时候,将数组的顺序重新排列,让点击的cell排在第一位,同时缩小tableview的大小,并且刷新tableview,这样做,就可以实现折叠cell的效果了。

代码展示

- (void)viewDidLoad {
    [super viewDidLoad];
    self.arr = [NSMutableArray arrayWithObjects:@"111", @"222", @"333", @"444", nil];
    _tableview = [[UITableView alloc] init];
    self.tableview.frame = CGRectMake(200, 300, 100, 30);
    self.tableview.delegate = self;
    self.tableview.dataSource = self;
    self.btn = [UIButton buttonWithType:UIButtonTypeCustom];
    self.btn.frame = CGRectMake(170, 300, 30, 30);
    self.btn.tag = 102;
    [self.btn addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
    [self.btn setImage:[UIImage imageNamed:@"未勾选_副本.png"] forState:UIControlStateNormal];
    [self.btn setImage:[UIImage imageNamed:@"已勾选_副本.png"] forState:UIControlStateSelected];//按钮的两个状态
    self.btn.selected = NO;
    [self.view addSubview:self.btn];
    [self.view addSubview:self.tableview];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 30;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 4;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"id"];
    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"id"];
    }
    cell.textLabel.text = _arr[indexPath.row];
    cell.textLabel.textColor = [UIColor blackColor];
    return  cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* str = _arr[indexPath.row];
    [_arr removeObjectAtIndex:indexPath.row];
    [_arr insertObject:str atIndex:0];
    [self.tableview reloadData];
    [self press];
}

-(void) press
{
    if(self.btn.tag == 101) {
        self.tableview.frame = CGRectMake(200, 300, 100, 30);
        self.btn.tag++;
        self.btn.selected = NO;
    } else {
        self.tableview.frame = CGRectMake(200, 300, 100, 150);
        self.btn.tag--;
        self.btn.selected = YES;
    }
}//控制是否更改tableview的范围

@end

标签:indexPath,tableView,tableview,折叠,iOS,cell,btn,self
From: https://blog.csdn.net/2301_79847748/article/details/141723000

相关文章

  • DevExpress WinForms v24.1亮点- TreeList、折叠组件全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件2024年第一个重大版本......
  • 3GPP R18 Network energy savings(NES) 之cell DTX/DRX
    在TR21.918中可以看到cellDTX/DRX是Networkenergysavings(NES)forNR的一部分,其中还包括SSB-lessSCelloperationforinter-bandCA等等其他内容,其相关描述如下网络节能是5G/NR成功的关键,由此可以减少对环境的影响(温室气体排放)并节省运营成本。RANWG进行了一项......
  • VMware Workstation 17.5.2 Pro for Linux 更新 OEM BIOS 2.7 支持 Windows Server 20
    VMwareWorkstation17.5.2ProforLinux更新OEMBIOS2.7支持WindowsServer2025VMwareWorkstation17.5.2PromacOSUnlocker&OEMBIOS2.7forLinux在Linux上运行macOSSonoma请访问原文链接:https://sysin.org/blog/vmware-workstation-17-unlocker-linux/,查......
  • VMware Workstation 17.5.2 Pro for Windows 更新 OEM BIOS 2.7 支持 Windows Server
    VMwareWorkstation17.5.2ProforWindows更新OEMBIOS2.7支持WindowsServer2025VMwareWorkstation17.5.2PromacOSUnlocker&OEMBIOS2.7forWindows在Windows上运行macOSSonoma请访问原文链接:https://sysin.org/blog/vmware-workstation-17-unlocker-win......
  • 《黑神话:悟空》硬件兼容性问题全攻略:从BIOS更新到驱动安装的详细修复指南
    《黑神话:悟空》作为一款备受期待的国产3A大作,自发布以来,确实遇到了一些玩家的电脑硬件兼容性问题。今天小编搜罗了网上反馈一些经常出现的BUG,来教大家如何进行修复操作!更新主板BIOS:对于13/14代酷睿处理器用户,首先尝试更新主板BIOS至最新版本,确保微代码版本为0x129。如果更新......
  • DevExpress WinForms v24.1亮点- TreeList、折叠组件全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件2024年第一个重大版本——......
  • Vue入门(四)Vue异步操作Axios
    一、Vue异步操作在Vue中发送异步请求,本质上还是AJAX。我们可以使用axios这个插件来简化操作!-使用步骤1.引入axios核心js文件。2.调用axios对象的方法来发起异步请求。3.调用axios对象的方法来处理响应的数据。-axios常用方法get:发起Get方式请求post:发起Po......
  • vue axios
    axios是基于promise的http库,可以用在浏览器和node.js中特性:从浏览器中创建XMLHttpRequests、从node.js创建http请求、支持promiseApi、拦截请求和响应、取消请求、自动转换JSON数据、客户端支持防御xsrfaxios就是一个库,也可以单独独立出来发送ajax。安装: npminstallaxiosa......
  • C++ 标准输入输出 -- <iostream>
    <iostream>库是C++标准库中用于输入输出操作的头文件。<iostream>定义了几个常用的流类和操作符,允许程序与标准输入输出设备(如键盘和屏幕)进行交互。以下是<iostream>库的详细使用说明,包括其主要类和常见用法示例。主要类std::istream:用于输入操作的抽象基类。std::ostre......
  • ios H5页面滚动适配问题
    1.取消页面整体回弹效果给body标签加上fixed就好可以使用document.body动态开关body.fixed{position:fixed;height:100vh;width:100vw;top:0;right:0;box-sizing:border-box;}2.滑动卡住问题问题:滑动时候会卡主不动,短暂静止后或者......