【iOS】折叠cell

这篇具有很好参考价值的文章主要介绍了【iOS】折叠cell。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在暑假的3GShare中用到了折叠cell控件,特此总结博客记录


一、实现效果

【iOS】折叠cell,ios,cocoa,macos,ui,objective-c

二、折叠cell的实现原理

首先我们需要知道ScrollView的是TableView的父类,我们可以通过代码来控制我们需要展示的cell的行数 ,也就是tableview的高度。
我们可以通过按钮来实现tableview的展开与关闭,并且通过- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 方法来实现我们单元格的切换

三、实现折叠cell的高度变化

既然我们已经知道实现折叠cell的关键是通过按钮控制tableview的高度,那么我们现在给出按钮点击函数

- (void)pressUp:(UIButton *)btn {
    if (btn.tag == 1002) {
        [btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 20);
        btn.tag--;
    } else {
        [btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 80);
        btn.tag++;
    }
}

如此一来便实现了我们点击按钮时我们展示的tableview高度会随按钮的点击而变化

四、实现选中点击的单元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // 从_dataArray获取被选中的项目
    NSString *selectedItem = _dataArray[indexPath.section];
    
    // 从_dataArray中移除被选中的项目
    [_dataArray removeObjectAtIndex:indexPath.section];
    
    // 将被选中的项目插入到_dataArray的开头
    [_dataArray insertObject:selectedItem atIndex:0];

    // 重新加载整个UITableView的数据
    [_tableView reloadData];
    
    // 调用pressUp:方法,执行按钮状态的切换
    [self pressUp:_zhedie];
}

当选择(点击)一个单元格时,将所对应部分的数据从_dataArray中移动到数组的顶部。这在didSelectRowAtIndexPath方法中完成。然后重新加载UITableView,并调用pressUp:方法以确保正确的布局。

总结

如此一来我们便简单实现了我们的折叠cell
以下给出完整的简单折叠cell的实现代码

- (void)viewDidLoad {
    [super viewDidLoad];
    //折叠cell=======
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(270, 200, 95, 80) style:UITableViewStylePlain];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    
    _dataArray = [NSMutableArray arrayWithObjects:@"cell1", @"cell2", @"cell3", @"cell4", nil];
    [self.view addSubview:_tableView];
    
    _zhedie = [UIButton buttonWithType:UIButtonTypeSystem];
    _zhedie.frame = CGRectMake(270 + 95, 200, 20, 20);
    _zhedie.backgroundColor = [UIColor whiteColor];
    [_zhedie setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
    [_zhedie addTarget:self action:@selector(pressUp:)
      forControlEvents:UIControlEventTouchUpInside];
    _zhedie.tag = 1001;
    [self.view addSubview:_zhedie];
    
    if (_zhedie.tag == 1001) {
        _tableView.frame = CGRectMake(270, 200, 95, 20);
    }
    //=======折叠cell}
    
}

//====折叠cell
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *selectedItem = _dataArray[indexPath.section];
    [_dataArray removeObjectAtIndex:indexPath.section];
    [_dataArray insertObject:selectedItem atIndex:0];
    
    [_tableView reloadData];
    [self pressUp:_zhedie];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSString *strID = @"ID";
    //尝试获取可以复用的单元格
    //如果得不到,返回为nil
    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:12.0];
    cell.textLabel.textAlignment = NSTextAlignmentLeft;

    return cell;
}

- (void)pressUp:(UIButton *)btn {
    if (btn.tag == 1002) {
        [btn setImage:[UIImage imageNamed:@"shou.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 20);
        btn.tag--;
    } else {
        [btn setImage:[UIImage imageNamed:@"fang.png"] forState:UIControlStateNormal];
        _tableView.frame = CGRectMake(270, 200, 95, 80);
        btn.tag++;
    }
}

折叠cell—demo文章来源地址https://www.toymoban.com/news/detail-690318.html

到了这里,关于【iOS】折叠cell的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Charles证书过期解决方法macos/ios

    今天心血来潮打开Charles想试试看抓包手机APP(ios),结果发现各种x和提示ssl错误。开始以为是和魔法的代理冲突或者ip变了,捯饬很久后发现web的也报错。 然后搜了一会原因发现时证书过期了 1、搜索“钥匙串访问”,直接搜索“charles”,找到打叉的名称,直接删掉 2、打开

    2024年02月03日
    浏览(53)
  • iOS/macOS - 逐行写入文件 (NSFileHandle)

    2024年02月15日
    浏览(46)
  • 报错building for iOS Simulator, but linking in object file built for iOS

    Coderliszt 2021.04.24 22:33:37字数 277阅读 1,158 article class=\\\"_2rhmJa\\\" 这个M1芯片下Xcode 编译错误的解决方案: Xcode版本:12.3 M1芯片的Macbook pro 在选中模拟器进行编译的时候,会报如下类似错误。 building for iOS Simulator, but linking in object file built for iOS, file \\\'xxx/Pods/WechatOpenSDK/WeChatSDK1.8.5/lib

    2023年04月08日
    浏览(40)
  • MacOS 14 系统 XCode15、 Flutter 开发 IOS

    MacOS14 Sonoma 安装 Flutter 开发环境 MacOS 系统 Flutter开发Android 环境配置 MacOS 系统 Flutter开发IOS 环境配置​​​​​​​ 前面我们已经在MacOS14 M3芯片上安装好 Flutter环境,包括开发工具 VsCode 、Android Stuiod,那么flutter如何开发IOS呢? 我们知道IOS开发语言为 objcet-c或者 swift,Flutter是

    2024年02月03日
    浏览(91)
  • macOS Sonoma编译OpenCV源码输出IOS平台库

    1.macOS下载并编译OpenCV源码:  克隆源码: 主仓: git clone https://github.com/opencv/opencv.git 扩展仓:  git clone https://github.com/opencv/opencv_contrib.git    编译xcode源码需要CMake与XCode命令行工具 确认已安装CMake  确认已安装XCode  安装xcode command line tools 确认系统已安装python环境

    2024年02月10日
    浏览(62)
  • uniapp打包之配置MacOS虚拟机生成iOS打包证书

    uniapp是一款跨端开发框架,可用于快速开发iOS、Android、H5等多端应用。本文将详细介绍如何实现uniapp开发的iOS应用打包。 一、下载苹果原版镜像文件 点击此处下载 二、安装VMware uniapp打包iOS应用需要生成相应证书和P2文件,这些都需要用到IOS环境,这里我是使用的是MacOS虚拟机

    2024年02月12日
    浏览(56)
  • macos搭建appium-iOS自动化测试环境

    目录 准备工作 安装必需的软件 安装appium 安装XCode 下载WDA工程 配置WDA工程 搭建appium+wda自动化环境 第一步:启动通过xcodebuild命令启动wda服务 分享一下如何在mac电脑上搭建一个完整的appium自动化测试环境 前期需要准备的设备和账号: mac电脑一台 iphone一台 苹果开发者账号一

    2024年02月13日
    浏览(39)
  • 【Effective Objective - C】—— 熟悉Objective-C

    Objective-C通过一套全新语法,在C语言基础上添加了面向对象特性。Objective-C的语法中频繁使用方括号,而且不吝于写出极长的方法名,这通常令许多人觉得此语言较为冗长。其实这样写出来的代码十分易读,只是C++或Java程序员不太能适应。 Objective-C语言学起来很快,但有很

    2024年01月16日
    浏览(46)
  • objective-c 基础学习

    目录 第一节:OC 介绍 ​​第二节:Fundation 框架 ​第三节:NSLog 相对于print 的增强 ​第四节:NSString ​第五节:oc新增数据类型 第六节: 类和对象 ​类的方法的声明与实现 ​第七节:类和对象的存储 第八节:nil 与 NULL 第九节:分组导航标记#pragma mark ​第十节:方法与函

    2024年02月07日
    浏览(41)
  • 终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

    最近在开发Flutter项目,运行ios环境的时候报错没有CocoaPods,安卓环境可以正常运行,当时一脸懵逼,网上搜索了一下,有给我讲原理的,还有让我安装这插件那插件的,最终把电脑搞得卡死,还没有解决我的问题,其实很多人和我一样只想解决问题,而不是废话一大堆的文章

    2024年01月22日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包