博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在VIEW中加载UICollectionView
阅读量:7165 次
发布时间:2019-06-29

本文共 2843 字,大约阅读时间需要 9 分钟。

hot3.png

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

110557_RSBA_2435827.png

在标签一栏,有很多属性需要添加,显然都用按钮实现太繁琐,也不太符合程序员的风格,而且如果这些标签需要动态设置将变得复杂,类似这样标签,选择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

105726_mLmW_2435827.png

size

105726_15Dq_2435827.png

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

110431_UOgm_2435827.png110621_HlOp_2435827.png

并设置尺寸

110711_TOYr_2435827.png

这样,对应的每个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的点击进行一些处理,和上面两排按钮相似的操作。

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

转载于:https://my.oschina.net/u/2435827/blog/498559

你可能感兴趣的文章