IOS-筛选功能之封装重构
来源:互联网 发布:皇朝万鑫软件 编辑:程序博客网 时间:2024/06/05 14:28
最近项目中用到筛选功能 具体效果图如下
做这个之前 我先考虑到的是 每个Item 之间的算法和自定义的每个Item样式的UI,其次我们要考虑产品的业务逻辑以及点击展开后的Height和Top
自定义的View 也就是Item 就不多说了,很简单.
1.我们整个白色的View 背景要满足点击展开后的效果,也就是我们要随着每个展开的高度做适应,首先我选择用的是滚动视图
2.筛选功能一般是一个按钮点击触发的,动画特效在这也不多说,因为点击筛选后 下拉出来的界面每个第一个选项默认选中,所以我们要点击的时候就要知道对应的值
3.关于请求数据:我这里选择胖model的结构方式, 把使用到的结构体都丢到整体model 例子:
weakSelf.filterCondition = [[MYFilterConditionModelalloc] initWithJson:dict];
- (void)updateLayout
{
CGFloat top = 0;
for (MYSearchFilterConditionView *filterin self.searchArray) {
filter.top = top;
filter.height = [filtergetHeight];
top += [filtergetHeight];
}
self.contentView.contentSize =CGSizeMake(self.contentView.width, top+18);
}
6,我们点击展开的时候触发的也是上面所写代码,因为一个方法就足以满足我们的需求
7.因为我这里的需求是 分品牌,价格 属性 所以我采用枚举如下
typedef enum {
MYSearch_Brand =0, //品牌
MYSearch_Price =1, //价格区间(元)
MYSearch_property =2, //类别属性
}MYSearchType;
一个类别可能有多个属性,增加了功能的难度.
8.接下来来说一下 九宫格算法,其实也不难,我们知道,每个Item 的的控件都要适应他其中的Title,适应宽度,并且我们要确定如果一个Item 超过了一个屏幕的宽度我们就要对其截取,或者折行. 算法如下: Item.width > self.width 如果我们的item 大于屏幕自身的宽度 我们就要进行处理
leftPosition = 16;
item.left = leftPosition;
colIndex =1;
rowIndex++;
if (rowIndex >= 1) {
topPosition += verticalGap +28;
}
item.top =self.searchLaebl.bottom + topPosition;
leftPosition +=item.width + horizationGap;
if (self.isOpen ==NO) {
if (rowIndex >= 2) {
//此处对应 展开功能
break;
}else{
self.openView.hidden =YES;
}
}
}else{
colIndex++;
item.left = leftPosition;
leftPosition += item.width;
if (colIndex >= 1) {
leftPosition +=horizationGap;
}
item.top =self.searchLaebl.bottom + topPosition;
}
itemTag++;
[item searchFilterItemAddTarget:selfaction:@selector(infoConditionClicked:)forControlEvents:UIControlEventTouchUpInside];
[self.searchItemArrayaddObject:item];
[selfaddSubview:item];
if (self.isOpen) {
//此处是点击展开后的回收
}
9.我们如何保存 我们点击后的状态值呢? 这里我使用下标,因为我把所有的数据都存在一个数组中 里面对应的很多结构体,我们可以使用这种方式判断isKindOfClass这样就很轻松的拿到我们要的 Item其中的数据,和对应的下标,然后我们再把所有选择的 item 的ID 点击确定的时候一起传递过去就可以了.
有不太懂的的就给我留言吧,我有时间就会回复哒.谢谢帮助我的人们 感谢你们!~~~~~
- IOS-筛选功能之封装重构
- 重构31式之封装集合
- C# 重构之三(封装字段重构)
- iOS封装功能生成 .framework
- iOS封装功能生成 .framework
- iOS封装功能生成 .framework
- iOS封装功能生成 .framework
- iOS封装功能生成 .framework
- 重构--封装结构
- 筛选功能
- 重构之美-Elcapsulate Collection(封装群集)
- Ajax技术之Ajax重构(封装XMLHttpRequest)
- iOS 开发之封装
- iOS之Sqlite3封装
- iOS 之AFN封装
- IOS中UISearchController搜索框筛选功能实现
- 【Java重构系列】重构31式之封装集合
- 【Java重构系列】重构31式之封装集合
- getline()函数详解
- UVALive 6659 Dromicpalin Substrings
- 堆和栈的区别
- android中onKeyDown()事件的分析
- 360公司 2016校园招聘在线笔试编程题
- IOS-筛选功能之封装重构
- 2016华为软件开发题目讲解
- HDU 5441 Travel (带权并查集 + 离线操作)
- 视频(多媒体) MediaPlayer,camera
- axis2-1.6.2+spring3.1.4 发布 webservice 客户端调用总结
- GOF23设计模式之 建造者模式
- 【Unity教程】Unity中的C#内存管理
- 格式验证、密码加密
- 收集的一个响应式基于bootstrap3的Color Admin 1.7后台模板