在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的點擊進行一些處理,和上面兩排按鈕類似的操做。


至此,第一篇技術性的總結寫完了,第一次寫博客,有什麼問題,但願你們批評指正。

相關文章
相關標籤/搜索