iOS: 悬浮的条件筛选下拉框的使用

1、介绍

app中条件筛选视图是很常用的功能,一般它搭配着tableView的表头悬浮滚动使用,点击按钮时,就会弹出下拉框显示条件,选择一个条件后,下拉框自动隐藏。

2、效果图如下

从中间点击弹出,然后滚动tableView随着移动,到顶部就悬浮着,下拉时仍然跟着滚动,一直滚动初始位置就停止。。。

 

3、实现方式

首先:采用分组的tableView,不过类型必须选择为Plain,这种类型本身就带悬浮效果。如果用Group类型,就没有悬浮效果;

//设置tableView风格
-(instancetype)initWithStyle:(UITableViewStyle)style{
    return [super initWithStyle:UITableViewStylePlain];
}

其次:计算组头到导航栏下边的距离。我将tableView分2组,第一组section表头高为260px,行高0.01,第二组section表头高为39px,则它距离导航栏顶部260px。

然后:给下拉框一个默认的frame,y= 260px + 39px = 299px, height=0。然后通过[UIView animation...]动画修改frame的值即可。

DDHomeConditionView是添加过tableView的view

 //条件视图(需要设置299为默认的y值)
 _conditionView = [[DDHomeConditionView alloc]initWithFrame:CGRectMake(0, 299, SCREEN_WIDTH, 0)];
 _conditionView.hidden = YES;
-(void)buttonCilicked:(UIButton *)sender{

    if (sender.selected) {
        [self showConditionView:sender];  //点击显示
    }else{
        [self hideConditionView];  //再次点击隐藏
    }
}
//显示条件视图
-(void)showConditionView:(UIButton *)sender{

    //将所有选中的按钮保存起来
    if (![self.buttonGroup containsObject:sender]) {
        [self.buttonGroup addObject:sender];
    }
    //显示条件视图
    [UIView animateWithDuration:0.2 animations:^{

        if (self.tableView.contentOffset.y > 260) { //tableView往上滚动距离大于260,y值为tableView的y偏移值+高

            _conditionView.frame = CGRectMake(0, self.tableView.contentOffset.y + 39, SCREEN_WIDTH , 160);
        }else{
            _conditionView.frame = CGRectMake(0, 299, SCREEN_WIDTH , 160);  //固定尺寸
        }
        _conditionView.hidden = NO;
    }];
}

//隐藏条件视图
-(void)hideConditionView{

    //隐藏条件视图
    [UIView animateWithDuration:0.2 animations:^{

        _conditionView.frame = CGRectMake(0, 260, SCREEN_WIDTH , 0);
        _conditionView.hidden = YES;

    } completion:^(BOOL finished) {

        //将所有选中的按钮设置为未选中状态
        for (UIButton *btn in self.buttonGroup) {
            [btn setSelected:NO];
        }

        //清除数组全部按钮
        [self.buttonGroup removeAllObjects];
    }];
} 

最后:监听tableView的滚动,其实就是ScrollView的滚动距离值scrollView.contentOffset.y,判断它是否大于上面计算的260px;

    如果大于,下拉框的y值等于scrollView.contentOffset.y + 39px,否则下拉框的y值就固定等于260px + 39px = 299px。

#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{

    if (scrollView.contentOffset.y > 260) { //tableView往上滚动距离大于260,y值为tableView的y偏移值+高
        _conditionView.frame = CGRectMake(0, scrollView.contentOffset.y + 39, SCREEN_WIDTH , 160);
    }else{
        _conditionView.frame = CGRectMake(0, 299, SCREEN_WIDTH , 160);  //固定尺寸
    }
}

本人原创,欢迎分享

时间: 2024-12-20 00:29:14

iOS: 悬浮的条件筛选下拉框的使用的相关文章

iOS: 悬浮的条件筛选框使用二

一.介绍: 在前面已经介绍了一种条件悬浮框,使用的是tableView的Plain分组样式实现的,因为这是tableView本身就具备的功能,分组悬浮效果.这次我来介绍第二种更加简单的方法,采用两个ScrollView来实现. 二.实现技术: (1)两个ScrollView,一个是左右滚动,成为内容视图,另一个是上下滚动,作为容器视图: (2) 创建头视图,头视图中有banner图和条件筛选框,标记banner图的高: (3)合理设置上下滚动的容器视图的frame,它承载头视图和内容视图,不过需

select、autocomplete标签下拉框

select标签为标准的下拉框,生成HTML里的<select>标签.qutocomplete标签为具有自动完成功能的下拉框,能根据所填的内容筛选下拉框内容.使用autocomplete标签必须使用Ajax主题,因为它用到了DOJO的JavaScript库. 1 <body> 2 <% 3 List<String> provinceList = new ArrayList<String>(); // List对象,存放省份 4 provinceList

自定义弹出窗口,实现可输入可过滤自动选择下拉框

/** jQuery dialog windows * author : piyg Copyright(c) : 2014-09-01 09:28 Version 1.0-pre 自定义定时定频弹出窗口: 用法: 在自身jsp页面调用 showDialog(title,fn1,fn2),showProcessDialog(title,fn1,fn2)方法. title: 自定义窗口头信息. fn1 ,fn2 自定义回调函数,分别绑定2个按钮事件 fn1: "继续提交"按钮事件. fn2

【经验】angularjs 实现带查找筛选功能的select下拉框

一.背景 对于select的下拉列表,像国家选择这样的功能,全世界那么多国家,一直拉滚动条多辛苦,眼睛也要盯着找,累!so,为优化用户体验,带查找功能的下拉框是非常非常有必要的.都知道jquery里有这样的插件,但我们用的是Angularjs,更希望用双向绑定,指令的方式优雅地解决这个问题. 分析:    目标 在原来的<select ng-options="">标签上新加一个属性 select-search 就能支持查找的功能.如果这个属性没起作用,也不影响原来的sele

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

IOS自制类似于下拉框的控件

最近做的有关物流的APP中,货物数量的单位需要在给定的范围选取(比如:吨.方.件),但ios没有类似Android中的下拉框,我就自己想了办法自制了一个,效果还算满意:以后项目组的本科小师妹会帮我一起做ios端的开发,在此表示感谢!!! 第一步:新建工程XiaLaKuang(名字比较俗,新建方法不再比比...) 第二步:操作main.storyboard ——>拖拽一个UIButton(命名Title为“吨”,background为“light gray”,Alignment中的Horizona

UI中经常出现的下拉框下拉自动筛选效果的实现

小需求是当你在第一个下拉框选择了国家时,会自动更新第二个省份的下拉框,效果如下 两个下拉选择Html如下: <select id="country_select"> <option> All Countries</option> <option> Afghanistan</option> <option> Albania</option> <option> Algeria</optio

js动态获取下拉框的数据(搜索条件之间互相影响)

前提:在开发的过程当中,我们常常会遇到这种问题:某个查询列表的查询条件之间互相影响,比如现在有两个搜索条件(下拉),一个需要显示小组名称,另一个是根据这个小组名称查找到对应的小组内人员.那么该如何实现呢? 原理:我们暂且将这三个下拉列表起名为A,B,C. 他们之间的依赖关系是:B的值随着A的变化而变化,C的值随着A,B的变化而变化.我们要做的就是: 1. 进入页面的时候只为A赋值,将B和C都清空. 2. 每次点击A的时候就将B和C的下拉框中的内容先清空再给B赋值. 3. 每次点击B的时候,将C的

robotframework 判断下拉框是否存在,如果存在就执行下拉框操作,不存在就跳过执行下拉框操作,进行下一步操作;

#本人新手,仅做学习记录之用 因为工作要求,打开的ui页面,根据前面筛选的条件不同,跳转的新页面不同,本记录涉及的就是有下拉框和没有下拉框,所以要对新打开的页面进行判断:run keyword and return status关键字返回element should be visible 的状态,如果为Ture,则执行下面run keyword if中的select from list by label:如果为Flase,则不执行: select from list by label中label