UICOllectionView-集合視圖

一、集合視圖的概念

1、如何創(chuàng)建UIColletionView

2、集合視圖的布局UICollectionViewFlowLayyout

3、自定義cell

4、布局協(xié)議UICollectionViewDelegateFlowLayout

5、UICollectonView與UITableView的實現(xiàn)類似,都需要設(shè)置delegate和dataSource

6、在collectionView中,cell的布局比tableView要復(fù)雜,需要使用一個類來描述集合視圖的布局---UICollectionViewLayout->UICollectionViewFlowLayout

二、創(chuàng)建步驟

1.使用系統(tǒng)布局UICollectionViewFlowLayout

2.創(chuàng)建UICollectionView

3.設(shè)置代理,設(shè)置數(shù)據(jù)源

4.設(shè)置自定義Cell

數(shù)據(jù)源

我們需要給collectionView指定一個數(shù)據(jù)源,它負(fù)責(zé)給對collectionView提供數(shù)據(jù)與顯示

#import"JYFViewController.h"

#import"Model.h"

#import"MyCell.h"

#import"MyHeader.h"

#import"MyFooter.h"

#import"UIImageView+WebCache.h"

@interfaceJYFViewController()<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>

@property(nonatomic,retain)NSMutableArray*allDataArray;

@end

@implementationJYFViewController

- (void)viewDidLoad

{

[superviewDidLoad];

// 1.獲取文件路徑

NSString*filePath = [[NSBundlemainBundle]pathForResource:@"Data"ofType:@"json"];

// 2.讀取文件數(shù)據(jù)

NSData*data = [NSDatadataWithContentsOfFile:filePath];

// 3.解析數(shù)據(jù)

NSArray*array = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments error:nil];

// 4.遍歷放入大數(shù)組中

self.allDataArray= [NSMutableArrayarray];

for(NSDictionary*dictinarray) {

Model*model = [Modelnew];

[modelsetValuesForKeysWithDictionary:dict];

[_allDataArrayaddObject:model];

[modelrelease];

NSLog(@"%@",_allDataArray);

}

// 1.創(chuàng)建UICollectionViewFlowLayout

UICollectionViewFlowLayout*flowLayout = [[UICollectionViewFlowLayoutalloc]init];

// 1.1設(shè)置每個Item的大小

flowLayout.itemSize=CGSizeMake(90,210);

// 1.2 設(shè)置每列最小間距

flowLayout.minimumInteritemSpacing=10;

// 1.3設(shè)置每行最小間距

flowLayout.minimumLineSpacing=10;

// 1.4設(shè)置滾動方向

flowLayout.scrollDirection=UICollectionViewScrollDirectionVertical;

// 1.5設(shè)置header區(qū)域大小

flowLayout.headerReferenceSize=CGSizeMake(self.view.bounds.size.width,50);

// 1.6設(shè)置footer區(qū)域大小

flowLayout.footerReferenceSize=CGSizeMake(self.view.bounds.size.width,50);

// 1.7 設(shè)置item內(nèi)邊距大小

flowLayout.sectionInset=UIEdgeInsetsMake(10,10,10,10);

// 2.創(chuàng)建UICollectionView

UICollectionView*collectionView = [[UICollectionViewalloc]initWithFrame:self.view.boundscollectionViewLayout:flowLayout];

// 3.設(shè)置數(shù)據(jù)源代理、collection代理

collectionView.dataSource=self;

collectionView.delegate=self;

[self.viewaddSubview:collectionView];

[collectionViewrelease];

[flowLayoutrelease];

collectionView.backgroundColor= [UIColorcolorWithRed:0.895green:1.000blue:0.656alpha:1.000];

// 4.注冊cell的類型和重用標(biāo)示符

[collectionViewregisterClass:[MyCellclass]forCellWithReuseIdentifier:@"cell"];

// 5.注冊footer和header類型的重用標(biāo)識符

[collectionViewregisterClass:[MyHeaderclass]forSupplementaryViewOfKind:UICollectionElementKindSectionHeaderwithReuseIdentifier:@"headerView"];

[collectionViewregisterClass:[MyFooterclass]forSupplementaryViewOfKind:UICollectionElementKindSectionFooter

withReuseIdentifier:@"footerView"];

}

#pragma mark - UICollectionViewDataSource Methods

#pragma mark 設(shè)置有多少個section

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView

{

return5;

}

#pragma mark 設(shè)置某個分組有多少行

- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section

{

return13;

}

#pragma mark 設(shè)置某個Item顯示什么內(nèi)容

- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath

{

// 1.去重用隊列中查找

MyCell*cell = [collectionViewdequeueReusableCellWithReuseIdentifier:@"cell"forIndexPath:indexPath];

// 2.使用

//CGFloat red = arc4random()% 256 / 255.0;

//CGFloat green = arc4random() % 256 / 255.0;

//CGFloat blue = arc4random() % 256 / 255.0;

//cell.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];

cell.label.text= [NSStringstringWithFormat:@"s = %ld r =%ld", indexPath.section, indexPath.row];

// 3.獲取將要顯示的模型

Model*model =_allDataArray[indexPath.row];

// 4.使用第三方獲取圖片并自動緩存

NSURL*imageUrl = [NSURLURLWithString:model.thumbURL];

[cell.imageViewsd_setImageWithURL:imageUrlplaceholderImage:[UIImageimageNamed:@"default_head_image@2x.png"]];

returncell;

}

#pragma mark 處理點擊事件

- (void)collectionView:(UICollectionView*)collectionView didSelectItemAtIndexPath:(NSIndexPath*)indexPath

{

NSLog(@"我被點擊了");

}

#pragma mark - UICollectionViewDelegateFlowLayout Method

#pragma mark 設(shè)置item的大小

- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath*)indexPath

{

returnCGSizeMake(90,120);

}

#pragma mark 設(shè)置footer和header

- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath

{

if(kind ==UICollectionElementKindSectionHeader) {

// 去重用隊列取可用的header

MyHeader*reusableView = [collectionViewdequeueReusableSupplementaryViewOfKind:kindwithReuseIdentifier:@"headerView"forIndexPath:indexPath];

// 使用

reusableView.headerImage.image= [UIImageimageNamed:@"屏幕快照 2014-0 9.30.50 9-11 上午.png"];

// 返回

returnreusableView;

}else{

// 去重用隊列取可用的footer

MyFooter*reusableView = [collectionViewdequeueReusableSupplementaryViewOfKind:kindwithReuseIdentifier:@"footerView"forIndexPath:indexPath];

// 使用

reusableView.backgroundColor= [UIColorredColor];

// 返回

returnreusableView;

}

}

#pragma mark 設(shè)置header和footer高度

- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section

{

returnCGSizeMake(self.view.bounds.size.width,70);

}

- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section

{

returnCGSizeMake(self.view.bounds.size.width,70);

}

- (void)didReceiveMemoryWarning

{

[superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

- (void)dealloc

{

[_allDataArrayrelease];

[superdealloc];

}

@end

總結(jié):

集合視圖UICollectionView和表示圖UITableView很相似,可根據(jù)layout屬性設(shè)置,顯示單元格集合內(nèi)容

UICollectionViewDataSource類作為集合視圖的數(shù)據(jù)源,向集合視圖提供數(shù)據(jù)。集合視圖依賴于委托(Delegate)中定義的方法對用戶進(jìn)行響應(yīng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容