一.前言
在我们写程序时,总有些功能是需要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