在iOS开发中,条件筛选框基本出现在每一个app中,今天我们就来了解一下条件筛选框
显而易见,我们的这个筛选框是通过tableview来实现的,所以我们自定义了一个继承自UIView的子类synthesizeMenuPopView
synthesizeMenuPopView.h
typedef void (^synthesizeMenuPopBlock)(NSString *cellTitle);
@interface synthesizeMenuPopView : UIView<UITableViewDelegate,UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@property(nonatomic,strong)NSMutableArray *dataArray ;
@property (nonatomic, copy) NSString *CellText ;
@property(nonatomic,copy)synthesizeMenuPopBlock block ;
@end
我们这里定义:
1 . 一个匿名函数 - block 用于传值
2 . 一个数组 - dataArray 用于tableview上展示的数据
3 . 一个字符串 - CellText 用于判断当前选中的文字和显示的文字效果
synthesizeMenuPopView.m
-(instancetype)initWithFrame:(CGRect)frame{
if (self == [super initWithFrame:frame]) {
self.backgroundColor = [kTextFieldColor colorWithAlphaComponent:0.6] ; // kTextFieldColor是我自己定义的宏,自行修改一下
UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, self.height)] ;
tableView.delegate = self ;
tableView.dataSource = self ;
tableView.separatorStyle = UITableViewCellSeparatorStyleNone ;
[self addSubview:tableView] ;
self.tableView = tableView ; // 将self.tableView指向tableView所在的地址
}
return self ;
}
//这里重写dataArray 的set方法,当每次给dataArray赋值的时候都会调用该方法,从而修改tableview的高度
-(void)setDataArray:(NSMutableArray *)dataArray{
_dataArray = dataArray ;
self.tableView.height = _dataArray.count * 85 * kFitWithWidth ;
}
//设置tableView的代理方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count ;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 85 * kFitWithWidth ;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * const cellID = @"cellID" ;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID] ;
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] ;
}
cell.textLabel.text = self.dataArray[indexPath.row];
if ([self.CellText isEqualToString:cell.textLabel.text]) {
cell.textLabel.textColor = RGB(247, 97, 76) ;
}else{
cell.textLabel.textColor = [UIColor blackColor] ;
}
cell.textLabel.font = [UIFont systemFontOfSize:10] ;
return cell ;
}
//tableView的点击事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// 获取选中cell
UITableViewCell *cell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
// 改变选中cell的 标题颜色
cell.textLabel.textColor = RGB(247, 97, 76);
// 传出选中cell的 标题
if (self.block != nil) {
self.block(cell.textLabel.text);
}
// 刷新tableView
[self.tableView reloadData];
// 选中后隐藏
self.hidden = YES;
return ;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
self.hidden = ! self.hidden ;
}
ViewController.m中
//简单使用
if (button.tag == kTagStart + 1) { // 销量
synthesizePopView.hidden = NO ;
synthesizePopView.dataArray = dataArray[0] ;
[synthesizePopView.tableView reloadData] ;
synthesizePopView.CellText = button.titleLabel.text ;
__weak __typeof__(self) weakSelf = self;
synthesizePopView.block = ^(NSString * _Nonnull cellTitle) {
//如果在 Block 内需要多次 访问 self,则需要使用 strongSelf
//__strong 确保在 Block 内,strongSelf 不会被释放。
__strong __typeof(self) strongSelf = weakSelf;
[strongSelf->priceMenuBtn setTitle:@"价格排序" forState:UIControlStateNormal] ;
[button setTitle:cellTitle forState:UIControlStateNormal] ;
if ([cellTitle isEqualToString:@"由高到低"]) {
sortTypeStr = 3 ;
}else if ([cellTitle isEqualToString:@"由低到高"]){
sortTypeStr = 2 ;
}else{
sortTypeStr = 1 ;
}
[strongSelf initRecommendViewApi] ;
} ;
}
这样一个筛选下拉就做完了。感觉还有很多不足的地方,希望大家指正。
心语:实习生活太苦逼,但是还得加油鸭🌟(求介绍工作鸭😂)