UICollectionView二级树展开
公司项目是社区类的,上周就下载了些社区类APP看了下,发现小区无忧首页的顶部蛮好玩,就试着做了一下,现在先把UICollectionView的二级树展开功能分享一下 .
1.效果图
2.创建子CollectionView
- //
- // DeatilView.h
- // Spread
- //
- // Created by City--Online on 15/10/30.
- // Copyright © 2015年 City--Online. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- typedef void(^DetailIndexPathBlock) (NSIndexPath *indexPath);
- @interface DetailView : UIView
- @property (nonatomic,copy) DetailIndexPathBlock detailIndexPathBlock;
- - (instancetype)initWithFrame:(CGRect)frame withTitleArray:(NSArray *)titleArray;
- @end
- //
- // DeatilView.m
- // Spread
- //
- // Created by City--Online on 15/10/30.
- // Copyright © 2015年 City--Online. All rights reserved.
- //
- #import "DetailView.h"
- ;
- static const float rowHeight=30.0;
- //static const int rows=2;
- @interface DetailView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
- @property (nonatomic,strong) UICollectionView *collectionView;
- @property (nonatomic,strong) NSArray *titleArray;
- @end
- @implementation DetailView
- - (instancetype)initWithFrame:(CGRect)frame withTitleArray:(NSArray *)titleArray
- {
- _titleArray=titleArray;
- return [self initWithFrame:frame];
- }
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- UICollectionViewFlowLayout *collectionViewFlowLayout=[[UICollectionViewFlowLayout alloc]init];
- collectionViewFlowLayout.minimumInteritemSpacing=0.0;
- collectionViewFlowLayout.minimumLineSpacing=0.0;
- collectionViewFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
- collectionViewFlowLayout.sectionInset = UIEdgeInsetsMake(, 0.0);
- float columuWidth=self.bounds.size.width/columns;
- collectionViewFlowLayout.itemSize=CGSizeMake(columuWidth, rowHeight);
- collectionViewFlowLayout.estimatedItemSize=CGSizeMake(columuWidth, rowHeight);
- collectionViewFlowLayout.scrollDirection=UICollectionViewScrollDirectionVertical;
- collectionViewFlowLayout.headerReferenceSize=CGSizeMake(, );
- collectionViewFlowLayout.footerReferenceSize=CGSizeMake(, );
- _collectionView=[[UICollectionView alloc]initWithFrame:self.bounds collectionViewLayout:collectionViewFlowLayout];
- _collectionView.backgroundColor=[UIColor whiteColor];
- _collectionView.delegate=self;
- _collectionView.dataSource=self;
- _collectionView.allowsSelection=YES;
- // _collectionView.allowsMultipleSelection=YES;
- [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
- [self addSubview:_collectionView];
- }
- return self;
- }
- - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
- {
- ;
- }
- - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- {
- return _titleArray.count;
- }
- - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
- {
- UICollectionViewCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
- cell.backgroundColor = [UIColor colorWithRed:arc4random()%/ / / ];
- return cell;
- }
- - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
- {
- if (self.detailIndexPathBlock != nil) {
- self.detailIndexPathBlock(indexPath);
- }
- }
- @end
3.主视图
- //
- // MainView.h
- // Spread
- //
- // Created by City--Online on 15/10/30.
- // Copyright © 2015年 City--Online. All rights reserved.
- //
- #import <UIKit/UIKit.h>
- @interface MainView : UIView
- - (instancetype)initWithFrame:(CGRect)frame withTitleArray:(NSArray *)mainArray;
- @end
- //
- // MainView.m
- // Spread
- //
- // Created by City--Online on 15/10/30.
- // Copyright © 2015年 City--Online. All rights reserved.
- //
- #import "MainView.h"
- #import "DetailView.h"
- ;
- @interface MainView ()<UICollectionViewDataSource,UIBarPositioningDelegate,UICollectionViewDelegateFlowLayout>
- @property (nonatomic,strong) UICollectionView *collectionView;
- @property (nonatomic,strong) NSArray *mainArray;
- @property (nonatomic,strong) NSMutableArray *detailArray;
- @property (nonatomic,strong) NSIndexPath *selectIndexPath;
- @property (nonatomic,strong) DetailView *detailView;
- @property (nonatomic,assign) bool *IsSpread;
- @end
- @implementation MainView
- - (instancetype)initWithFrame:(CGRect)frame withTitleArray:(NSArray *)mainArray
- {
- _mainArray=mainArray;
- _selectIndexPath=nil;
- return [self initWithFrame:frame];
- }
- - (instancetype)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- UICollectionViewFlowLayout *collectionViewFlowLayout=[[UICollectionViewFlowLayout alloc]init];
- collectionViewFlowLayout.minimumInteritemSpacing=1.0;
- collectionViewFlowLayout.minimumLineSpacing=0.0;
- collectionViewFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
- collectionViewFlowLayout.sectionInset = UIEdgeInsetsMake(, 0.0);
- )/columns;
- collectionViewFlowLayout.itemSize=CGSizeMake(columuWidth, columuWidth);
- collectionViewFlowLayout.estimatedItemSize=CGSizeMake(columuWidth, columuWidth);
- collectionViewFlowLayout.scrollDirection=UICollectionViewScrollDirectionVertical;
- collectionViewFlowLayout.headerReferenceSize=CGSizeMake(, );
- collectionViewFlowLayout.footerReferenceSize=CGSizeMake(, );
- _collectionView=[[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:collectionViewFlowLayout];
- _collectionView.backgroundColor=[UIColor whiteColor];
- _collectionView.delegate=self;
- _collectionView.dataSource=self;
- _collectionView.allowsSelection=YES;
- [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
- [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"footer"];
- [self addSubview:_collectionView];
- }
- return self;
- }
- - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- {
- return columns;
- }
- - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
- {
- UICollectionViewCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
- cell.backgroundColor=indexPath.section%? [UIColor redColor]:[UIColor yellowColor];
- if (indexPath.section*columns+indexPath.row>_mainArray.count) {
- cell.backgroundColor=[UIColor clearColor];
- }
- return cell;
- }
- - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
- {
- if (_selectIndexPath!=indexPath&&_selectIndexPath!=nil) {
- _IsSpread=YES;
- }
- else
- {
- _IsSpread=!_IsSpread;
- }
- if (!_IsSpread) {
- //改变主CollectionView视图Frame和子CollectionView的Frame
- self.frame=CGRectMake(, , self.bounds.size.width, self.bounds.size.width);
- }
- else
- {
- self.frame = CGRectMake(, , self.bounds.size.width, self.bounds.size.width+(()/)*30.0);
- }
- _collectionView.frame = self.frame;
- _selectIndexPath=indexPath;
- //改变数据源
- _detailArray=[(@[@"AAA",@"BBB",@"CCC",@"DDD",@"EEE"]) mutableCopy];
- [_collectionView reloadData];
- }
- - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
- {
- )/;
- }
- //针对每个分区的页眉和页脚, 返回对应的视图对象, 重用的
- - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
- {
- UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"footer" forIndexPath:indexPath];
- //将第二个视图控制器添加到区尾上
- if (_detailView!=nil) {
- [_detailView removeFromSuperview];
- _detailView=nil;
- }
- _detailView =[[DetailView alloc] initWithFrame:CGRectMake(, , self.bounds.size.width, ((+)/)*30.0) withTitleArray:_detailArray];
- _detailView.detailIndexPathBlock=^(NSIndexPath *indexPath)
- {
- NSLog(@"%@",indexPath);
- };
- [footerView addSubview:_detailView];
- return footerView;
- }
- - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
- {
- if (section==_selectIndexPath.section&&_IsSpread) {
- )/)*30.0) ;
- }
- else
- {
- return CGSizeZero;
- }
- }
- @end
4.调用
- //
- // ViewController.m
- // Spread
- //
- // Created by City--Online on 15/10/30.
- // Copyright © 2015年 City--Online. All rights reserved.
- //
- #import "ViewController.h"
- #import "MainView.h"
- #import "DetailView.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- MainView *mainView=[[MainView alloc]initWithFrame:CGRectMake(, , self.view.bounds.size.width, self.view.bounds.size.width) withTitleArray:@["]];
- [self.view addSubview:mainView];
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
5.结果图
今天又添加了ScrollView分页 demo地址:https://github.com/ywcui/Spread
UICollectionView二级树展开的更多相关文章
- 下拉的DIV+CSS+JS二级树型菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ZENCART 二级 分类 展开
zencart首页默认的是只显示一级分类,很多做仿牌外贸的朋友觉得只显示一级分类不好看,也不利于产品展示.怎么让zencart首页显示二级目录?下面分享给大家: 打开文件’includes/class ...
- js展开一颗树
Tree View 指令不支持 树结构数据源, 只支持单层数组.(也许是我没发现,人家可以设置) .我只能把树展开,变成单层数组.然后还要记录已经递归到第一层了.比如这样. <!doctype ...
- zencart侧边导航点击一级目录展开二级目录
[小 大] 2013-09-17 00:20 来源: 未知 作者:wtozz_admin 我要投稿 zencart侧边导航点击一级目录展开二级目录 zen cart Categories默认的是只显示 ...
- 【zTree】zTree展开树节点
今天在做zTree树的时候想着将第一级tree展开,于是利用下面方法: /** * 展开树节点的第一层 */ function openFirstTreenode(){ // 获取树对象 var tr ...
- 原创的基于HTML/CSS/JavaScript的层级目录树
之前参加过一些基于HTML/CSS/JavaScript的项目,当在页面中需要生成一颗目录树时,总是首先想着网上有没有现成的生成树的源代码,比如dtree.zthee,或者使用一些javascript ...
- 步步为营103-ZTree 二级联动
1:添加引用 <%--流程类别多选--引用js和css文件--开始--%> <link rel="stylesheet" href="../css/zT ...
- python 全栈开发,Day109(客户管理之动态"二级"菜单)
昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...
- UICollectionView 常用操作
1 iOS开发 - UICollectionView点击展开收起
随机推荐
- 记那些年在asp.net mvc上挖过的坑
表现: IDE是vs2017.是在 A 控制器方法断点后,却怎么也运行不到那个位置,但是又正常返回页面.该方法位于web项目引用的控制器类库上的一个控制器,试过它隔壁的控制器,一切正常. 但每次访问该 ...
- SQL 从数据库中随机取n条数据
用NEWID()方法. * ,NEWID() AS random from [toblename] order by random 其中的1可以换成其他任意整数,表示取的数据条数
- Npoi将excel数据导入到sqlserver数据库
/// <summary> /// 将excel导入到datatable /// </summary> /// <param name="filePath&qu ...
- Sql语法高级应用之四:使用视图实现多表联合数据明细
之前章节我们讲到:如果某个表的数据是多个表的联合,并且存在列与列的合并组成新列,用视图是最好的方案. 下面我分享两个个真实的SQL语句案例 USE Wot_Inventory GO FROM sys. ...
- 466. Count The Repetitions
Define S = [s,n] as the string S which consists of n connected strings s. For example, ["abc&qu ...
- “全栈2019”Java异常第三章:try代码块作用域详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- 关于Mysql数据库进行多表查询时设计编程思想
SQL代码:
- junit启动tomcat来进行单元测试
1.pom.xml配置下载需要的jar. <dependency> <groupId>junit</groupId> ...
- LG的nexus5(32GB版本 - 821)-TOT-底包 可用于救砖!
LG的nexus5(32GB版本 - 821)-TOT-底包 底层修复效果完美,通过LGflashTool1.8直接刷进去就行~ 底包下载: https://pan.baidu.com/s/1Z5WD ...
- 【javascript】—— JS判断浏览器类型、操作系统
navigator.userAgent : userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. navigator.platform : platform ...