iOS条件选择下拉菜单

多条件筛选下拉菜单,在很多应用中都有使用。例如:京东、美团等。我们先看一下运行效果:


DropDownMenu.gif

接下来我会针对里面主要代码进行讲解
首先创建出筛选条件类,在创建下拉菜单控件的时候把这个存放该类数组传进去,创建对应标题的按钮

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

你可能感兴趣的:(iOS条件选择下拉菜单)