ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UITableView的展开与收缩

2021-09-04 16:02:40  阅读:267  来源: 互联网

标签:tableView 收缩 self LabelTableViewCell showLabel button UITableView 展开


一.前言

在我们写程序时,总有些功能是需要UITableView的展开与折叠才能达到其想要的目的,所以在此写这篇博客作为笔记。

二.思路

1.重写UITableViewCell,可以按照自己的需求进行相应的重写。
2.在一个可变的数组的长度作为UITableView返回的行数,达到UITableViewCell行数可变的目的。
3.创建一个BOOL类型的属性,作为UITableView展开和收缩的判断值,在创建一个UIButton并添加事件来改变该BOOL类型的属性即控制UITableView的展开和收缩。
4.将UITableView添加到视图上,在需要展开的时候对其frame进行位置初始化,在收缩的时候将其的frame赋值为CGRectZero,它就不会显示在视图上。

三.下面是程序的具体代码

自定义cell,这里我只添加了UILabel,可根据自己的需求进行相应的改变

LabelTableViewCell.h

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface LabelTableViewCell : UITableViewCell

@property (nonatomic, strong) UILabel *showLabel;

@end

NS_ASSUME_NONNULL_END

LabelTableViewCell.m

#import "LabelTableViewCell.h"

@implementation LabelTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if ([self.reuseIdentifier isEqualToString:@"show"]) {
        self.showLabel = [[UILabel alloc] init];
        self.showLabel.font = [UIFont systemFontOfSize:30];
        self.showLabel.textAlignment = NSTextAlignmentCenter;
        [self.contentView addSubview:self.showLabel];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    self.showLabel.frame = CGRectMake(0, 0, 300, 50);
}

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) UIButton *button;
@property (nonatomic, strong) UITableView *tableView;
@property BOOL openClose;
@property (nonatomic, strong) NSMutableArray *array;

@end

ViewController.m

#import "ViewController.h"
#import "LabelTableViewCell.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor orangeColor];
    
    [self creatView];
}

- (void)creatView {
    self.openClose = 0;
    
    self.array = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
    
    self.button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [self.button setTitle:@"点击展开" forState:UIControlStateNormal];
    [self.button addTarget:self action:@selector(pressButton:) forControlEvents:UIControlEventTouchUpInside];
    self.button.frame = CGRectMake(50, 200, 300, 50);
    self.button.titleLabel.font = [UIFont systemFontOfSize:28];
    self.button.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:self.button];
    
    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.view addSubview:self.tableView];
    
    [self.tableView registerClass:[LabelTableViewCell class] forCellReuseIdentifier:@"show"];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    LabelTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"show" forIndexPath:indexPath];
    cell.showLabel.text = self.array[indexPath.row];
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (self.openClose == 0) {
        return 0;
    } else {
        return self.array.count;
    }
}

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

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

- (void)pressButton:(UIButton *)button {
    if (self.openClose == 0) {
        self.tableView.frame = CGRectMake(50, 250, 300, 50 * self.array.count);
        [self.button setTitle:@"点击收缩" forState:UIControlStateNormal];
    } else {
        self.tableView.frame = CGRectZero;
        [self.button setTitle:@"点击展开" forState:UIControlStateNormal];
    }
    self.openClose = !self.openClose;
    [self.tableView reloadData];
}

@end

四.效果图

23
546

标签:tableView,收缩,self,LabelTableViewCell,showLabel,button,UITableView,展开
来源: https://blog.csdn.net/m0_55124878/article/details/120100832

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有