在VIEW中加载UICollectionView

废话很少说,先看一个效果图程序员

在标签一栏,有不少属性须要添加,显然都用按钮实现太繁琐,也不太符合程序员的风格,并且若是这些标签须要动态设置将变得复杂,相似这样标签,选择UICollectionView是比较合理的作法。函数

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

- (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是什么样的。code

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

Attributes
接口

size博客

这样只是给main_view添加了这样一个空的collection_view,其中每一个cell用什么填充,须要本身再写一个XIBit

并设置尺寸io

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


至此,第一篇技术性的总结写完了,第一次写博客,有什么问题,但愿你们批评指正。

相关文章
相关标签/搜索