多条件筛选下拉菜单,在很多应用中都有使用。例如:京东、美团等。我们先看一下运行效果:
接下来我会针对里面主要代码进行讲解
首先创建出筛选条件类,在创建下拉菜单控件的时候把这个存放该类数组传进去,创建对应标题的按钮
- (instancetype)initWithFrame:(CGRect)frame modelArr:(NSArray *)modelArr;
//筛选类
@interface Model : NSObject
@property (nonatomic, strong) NSString *title; //条件标题
@property (nonatomic, assign) DropDownMenuViewType type; //弹出视图类型
@property (nonatomic, assign) BOOL isSelect; //当前标题是否被选中
@property (nonatomic, assign) NSInteger fileterIndex; //选中该标题中的某个条件的下标 默认选中第一个
@property (nonatomic, strong) NSArray *fileterArr; //该标题下的查询条件数组
@end
当出现tableView的时候,阻断其他按钮的点击事件
//当前tableView已经出现的时候 点击其他的条件选择按钮没有效果
for (Model *tempModel in self.modelArr) {
if (tempModel.isSelect && index != self.selectBtnIndex) {
return;
}
}
因为下面的黑色阴影部分添加的有手势点击事件,所以他会跟UITableView和UICollectionView中的cell点击事件发生冲突,通过实现手势代理来解决这个问题,具体代码如下:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//获取当前手势点击的视图:他会是UITableViewCell或者UICollectionViewCell的内容视图
//然后获取到他的父视图 可以找到你自己定义的cell类
//通过判断类型来阻断手势触发
if ([touch.view.superview isKindOfClass:[UITableViewCell class]] || [touch.view.superview isKindOfClass:[MyCollectionViewCell class]]) {
return NO;
}
return YES;
}
最后附上代码的下载地址:
https://github.com/liuxiaoxin369/DropDownMenuView