前言
在写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];
}
效果图:
点击后:
选择后(这里以选择设计师观点为例):
再次打开: