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点击展开收起
随机推荐
- 了解什么是版本控制 & 用tortoiseSVN 建立本地版本库来管理自己的代码
什么是版本控制 版本控制系统(Version Control System,简称VCS)广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了 ...
- 如何进入PageAdmin CMS 安装界面
一般下面几个应用场景如第一次使用PageAdmin配置参数.服务器迁移.主域名更换.忘记超级管理员密码等都可以在安装界面进行设置. 下面为PageAdmin安装步骤 1.地址栏输入:http://您的 ...
- 【OCP题库-12c】最新CUUG OCP 071考试题库(72题)
72.View the exhibit for the structure of the STUDENTand FACULTYtables. STUDENT Name Null? Type ----- ...
- 【ocp-12c】最新Oracle OCP-071考试题库(38题)
38.choose the best answer View the Exhibit and examine the data in the PROMOTIONS table. PROMO_BEGIN ...
- “全栈2019”Java异常第十二章:catch与异常匹配
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- JAVA判断质数
好久没写了,今天做题有点忘了,不会写了.重新做了一份,整理出来. import java.util.Scanner; public class 判断质数 { public static boolean ...
- Docker的安装与启动教程
一.安装Docker Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的.在很多版本的CentOS中是 ...
- 浅析group by,having count()
SELECT COUNT(*) FROM (SELECT COUNT(id),order_type,city_id,category_id,major_category_id,puid,user_id ...
- Ionic2 自学须知的基本知识点
http://www.cnblogs.com/zsl123/p/5991336.html Ionic(ionicframework)一款接近原生的HTML5移动App开发框架. IONIC 是目前最有 ...
- Es6 类class的关键 super、static、constructor、new.target
ES6引入了Class(类)这个概念,作为对象的模板,通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对 ...