UITableView的展开与收缩

前言

在写shareAPP时碰到有tableview的点击选择收缩,我们在app中也经常会用到这个,就记录下来

思路

1.新建TAYTableViewCell 继承自UITableViewCell,新建cell可以看这篇
2.用可变数组添加更改元素,用可变字符串记录被选择的元素
3. 创建一个BOOL值记录tableview的开合状态,用button控制事件
4. 将被选择的元素添加到可变数组第一个,并删除该元素在原始位置的值
5. 根据开合状态调节tableview的section数

可能文字解释起来比较啰嗦,下来看代码

新建cell

在这里对创建自定义cell就不做过多的解释了,因为该cell只添加了一个label,也可使用UITableView自带的cell

TAYTableViewCell.h 文件里:

@property UILabel *label;

TAYTableViewCell.m 文件里:

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    
    self.label = [[UILabel alloc] init];
    [self.contentView addSubview:_label];
    
    return self;
}

- (void)layoutSubviews {
    
    [super layoutSubviews];
    _label.frame = CGRectMake(0, 0, 300, 30);
    
}

- (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
}

将cell应用于tabkeView,并进行收缩操作:

ViewController.h 文件里:

#import <UIKit/UIKit.h>
#import "TAYTableViewCell.h"

@interface ViewController : UIViewController
<
UITableViewDataSource,
UITableViewDelegate
>


@property UITableView *tableView;
@property UIButton *button;
@property NSMutableArray *strArr;
@property NSMutableString *str;
@property BOOL openSelect;
@property TAYTableViewCell *cell;

@end

ViewController.m 文件里:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //初始状态为关闭
    _openSelect = NO;
    
    //创建一个可变数组并赋值
    _strArr = [[NSMutableArray alloc] init];
    [_strArr addObject:@"原创作品"];
    [_strArr addObject:@"设计资料"];
    [_strArr addObject:@"设计师观点"];
    [_strArr addObject:@"设计教程"];
    
    //创建一个tableview
    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(275, 155, 100, 25) style:UITableViewStylePlain];
    [self.view addSubview:_tableView];
    
    //创建一个button
    _button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [self.view addSubview:_button];
    _button.frame = CGRectMake(375, 155, 25, 25);
    [_button setImage:[UIImage imageNamed:@"close1.png"] forState:UIControlStateNormal];
    //添加button事件
    [_button addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchDown];
    
    //设置tableview代理
    _tableView.delegate = self;
    _tableView.dataSource = self;
    
    //注册cell
    [_tableView registerClass:[TAYTableViewCell class] forCellReuseIdentifier:@"111"];
    
}

//初始化cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    _cell = [tableView dequeueReusableCellWithIdentifier:@"111" forIndexPath:indexPath];
    
    //如果没有,创建一个cell
    if(!_cell){
        _cell = [[TAYTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"111"];
        _cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }
    
    //对tableview的状态进行判断
    if(_openSelect == YES){
        
        
        _cell.textLabel.text = _strArr[indexPath.row];
        _cell.textLabel.font = [UIFont systemFontOfSize:13];
        
    } else {
        
        _cell.textLabel.text = _strArr[indexPath.row];
        _cell.textLabel.font = [UIFont systemFontOfSize:13];
        
    }
    
    return _cell;
    
}

- (void)pressBtn:(UIButton *)btn{
    //对现在的状态进行判断
    if(_openSelect == NO){
        self.tableView.frame = CGRectMake(275, 155, 100, 100);
        _openSelect = YES;
        [btn setImage:[UIImage imageNamed:@"open.png"] forState:UIControlStateNormal];
        
    } else {
        self.tableView.frame = CGRectMake(275, 155, 100, 25);
        _openSelect = NO;
        [btn setImage:[UIImage imageNamed:@"close1.png"] forState:UIControlStateNormal];
    }
    //刷新tableview数据
    [_tableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //如果是未打开的,行数为1
    if(_openSelect == NO){
        return 1;
    } else {
        //如果已经打开tableview,行数为4
        return 4;
    }
}

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    //记录点击的元素
    _str = [NSMutableString stringWithString:_strArr[indexPath.row]];
    //将该元素提到第一个,insertObject:atIndex:函数自动后移其他元素
    [_strArr insertObject:_str atIndex:0];
    //因为加入了一个元素,它本来存在的地方就后移一个,删除该元素
    [_strArr removeObjectAtIndex:indexPath.row + 1];
    //收缩tableview
    _openSelect = NO;
    //将tableview的大小改为一格的大小
    _tableView.frame = CGRectMake(275, 155, 100, 25);
    //button图标变为合上的图标
    [_button setImage:[UIImage imageNamed:@"close1.png"] forState:UIControlStateNormal];
    //刷新tableview
    [_tableView reloadData];
    
}

效果图:

在这里插入图片描述
点击后:
在这里插入图片描述
选择后(这里以选择设计师观点为例):
在这里插入图片描述
再次打开:
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值