文档章节

在VIEW中加载UICollectionView

大巴黎
 大巴黎
发布于 2015/08/28 11:28
字数 897
阅读 133
收藏 0

废话不多说,先看一个效果图

在标签一栏,有很多属性需要添加,显然都用按钮实现太繁琐,也不太符合程序员的风格,而且如果这些标签需要动态设置将变得复杂,类似这样标签,选择UICollectionView是比较合理的做法。

下面为了叙述方便,我们把整个的view称为main_view,下面的8个标签对应的view称为collection_view,接下来上代码

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"MainFilterView"
                                                      owner:self
                                                    options:nil]
                        firstObject];
        view.frame = frame;
        [self addSubview:view];  
        [_collectionView registerNib:[UINib nibWithNibName:@"MainViewFilterCollectionViewCell"
                                      bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"MainViewFilterCollectionViewCell"];
        return self;
    }
    return nil;
}

在你的mainView中,你需要在initWithFrame中添加这样的代码,

[_collectionView registerNib:[UINib nibWithNibName:@"MainViewFilterCollectionViewCell"
                                      bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"MainViewFilterCollectionViewCell"];

这里你需要定义你的Cell,并给collection_view注册这个view,这就相当于告诉系统每个cell是什么样的。

当然你还要在main_view中去设置整个collection_view的一些尺寸、设置一些代理、连接输出口等操作,这里只截图做简要说明

Attributes

size

这样只是给main_view添加了这样一个空的collection_view,其中每个cell用什么填充,需要自己再写一个XIB

并设置尺寸

这样,对应的每个cell也弄好了,就可以运行了,当然你需要在main_view对应的m文件中实现collection_view的一些代理,

就是网上都能查到的

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath

最后一个很关键,这里需要返回每个item的size,如果这个值返回的和cell的xib中不同,那显示就会有问题,我的经验是,collection_view中要设置的每个cell的大小(在main_view的xib中)、cell对应的xib中设置的大小以及main_view对应m文件中实现的代理返回的大小应该是一致的,这样就不会有各种显示的问题,如果你的collection_view显示不正常,请先确认这3个值是否相同。

在cell对应的m文件中,你需要写这样的代码

- (void)awakeFromNib {
    [super awakeFromNib];
    _labelBtnView.layer.cornerRadius = 3;
    self.layer.cornerRadius = 3.0;
}

这里的awakeFromNib,当.nib文件被加载的时候,会发送一个awakeFromNib的消息到.nib文件中的每个对象,每个对象都可以定义自己的awakeFromNib函数来响应这个消息,执行一些必要的操作。也就是说通过nib文件创建view对象时执行awakeFromNib

这里我是在我的cell中放置了一个button,名字是_labelBtnView,有朋友可能会问,为什么不用

didSelectItemAtIndexPath,为什么这样做以后再讨论。

当然,这里的按钮也要连接一下输入口,里面可以写你的响应。如果你不需要在cell中去对这个点击做什么处理,那可以定义个代理,然后在main_view的m文件中实现代理的接口,这样,当你点击每个cell的时候就可以将对cell的操作反馈给main_view,这时候main_view可能会对每个cell的点击进行一些处理,和上面两排按钮相似的操作。


至此,第一篇技术性的总结写完了,第一次写博客,有什么问题,希望大家批评指正。


© 著作权归作者所有

大巴黎
粉丝 3
博文 19
码字总数 13049
作品 0
广州
私信 提问
IOS中UICollectionView的基本用法

本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView。 UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视...

Erichkko
2015/08/28
807
0
一次从xib修改为纯代码带来的惨剧

今天在项目中遇到一个问题,是UICollectionView的一个DataSource方法- (UICollectionReusableView *)collectionView: viewForSupplementaryElementOfKind: atIndexPath:在同一个VC中被重复调......

yoyoso
2016/04/26
1K
0
通过UICollectionView创建网格布局

在这个教程中,我们经构建一个件的程序,以网格布局的俄方式现实图片集,你将学到下面的信息: UICollectionView简介 如何是使用UICollectionView构建一个简单的基于网格的布局 自定义Collect...

人生天地间
2014/04/10
2.9K
0
iOS流布局UICollectionView系列二——UICollectionView的代理方法

iOS流布局UICollectionView系列二——UICollectionView的代理方法 一、引言 在上一篇博客中,介绍了最基本的UICollectionView的使用和其中我们常用的属性和方法,也介绍了瀑布流布局的过程与...

珲少
2015/10/27
8.2K
3
UICollectionView简介

一、集合视图概述 UICollectionView也称集合视图,是一种新的数据展示方式,简单地可以理解为多列的UITableView。例如:iBooks的书架效果、购物网站的商品展示效果等等。 UICollectionView与...

黑伞将军
2015/09/14
332
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
32分钟前
8
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
48分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML表单设计1

表单是PHP程序中最常使用的收集站点访问者信息的数据输入界面。通过表单浏览器获取用户的输入数据,并传送给Web服务器的脚本程序中,以各种不同的方式进行处理。在表单中提供了多种输入方式,...

老码农的一亩三分地
50分钟前
4
0
武者Vue

本文转载于:专业的前端网站➼武者Vue 1 - Introduction2 - The Vue Instance3 - Data & Methods4 - Data Binding5 - Events6 - Event Modifiers7 - Keyboard Events8 - Two-Way Data......

前端老手
55分钟前
6
0
uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部