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

四.效果图

UITableView的展开与收缩
UITableView的展开与收缩

上一篇:EFCore EF 数据迁移 Add-Migration失败


下一篇:总结Linux常用命令使用格式,并用实例说明。例如echo、screen、date、ifconfig、export等命令