• 【iOS】折叠cell



    前言

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


    一、实现效果

    在这里插入图片描述

    二、折叠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++;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如此一来便实现了我们点击按钮时我们展示的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];
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    当选择(点击)一个单元格时,将所对应部分的数据从_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++;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    折叠cell—demo

  • 相关阅读:
    读高性能MySQL(第4版)笔记08_创建高性能索引(上)
    人工神经网络教学视频第三版,人工神经网络教程
    代码越写越乱?那是因为你没用责任链
    C语言深度解析:函数的形参和实参与传值和传址(多角度分析,让你有一种相见恨晚的感觉!!!!)
    学习并了解MQ消息队列
    Android 使用Linphone SDK开发SIP客户端
    关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
    WPF实现树形表格控件(TreeListView)
    element ui 的tree单选,控制setCheckedNodes传入data即可
    OD机考真题搜集:不开心的小朋友
  • 原文地址:https://blog.csdn.net/weixin_72437555/article/details/132567541