您的位置:首页 > 产品设计 > UI/UE

iOS ---UICollectionView简单使用

2016-04-16 18:14 483 查看

首先认识一下UICollectionView

[objc] view
plain copy







NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionView : UIScrollView

UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类。

使用UICollectionView 必须实现UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议。

下面给出一些常用方法,具体的使用可以参考Demo:点我下载
苹果官方Demo:点我下载

[objc] view
plain copy







- (void)viewDidLoad

{

[super viewDidLoad];

self.title = @"UICollectionView学习";

//通过Nib生成cell,然后注册 Nib的view需要继承 UICollectionViewCell

[self.collectionView registerNib:[UINib nibWithNibName:@"SQCollectionCell" bundle:nil] forCellWithReuseIdentifier:kcellIdentifier];

//注册headerView Nib的view需要继承UICollectionReusableView

[self.collectionView registerNib:[UINib nibWithNibName:@"SQSupplementaryView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kheaderIdentifier];

//注册footerView Nib的view需要继承UICollectionReusableView

[self.collectionView registerNib:[UINib nibWithNibName:@"SQSupplementaryView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:kfooterIdentifier];

//

self.collectionView.allowsMultipleSelection = YES;//默认为NO,是否可以多选

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark -CollectionView datasource

//section

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

{

return 2;

}

//item个数

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

{

return 6;

}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:

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

{

//重用cell

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kcellIdentifier forIndexPath:indexPath];

//赋值

UIImageView *imageView = (UIImageView *)[cell viewWithTag:1];

UILabel *label = (UILabel *)[cell viewWithTag:2];

NSString *imageName = [NSString stringWithFormat:@"%ld.JPG",(long)indexPath.row];

imageView.image = [UIImage imageNamed:imageName];

label.text = imageName;

cell.backgroundColor = [UIColor redColor];

return cell;

}

// The view that is returned must be retrieved from a call to -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:

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

NSString *reuseIdentifier;

if ([kind isEqualToString: UICollectionElementKindSectionFooter ]){

reuseIdentifier = kfooterIdentifier;

}else{

reuseIdentifier = kheaderIdentifier;

}

UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind :kind withReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

UILabel *label = (UILabel *)[view viewWithTag:1];

if ([kind isEqualToString:UICollectionElementKindSectionHeader]){

label.text = [NSString stringWithFormat:@"这是header:%d",indexPath.section];

}

else if ([kind isEqualToString:UICollectionElementKindSectionFooter]){

view.backgroundColor = [UIColor lightGrayColor];

label.text = [NSString stringWithFormat:@"这是footer:%d",indexPath.section];

}

return view;

}

//定义每个UICollectionViewCell 的大小

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

{

return CGSizeMake(60, 80);

}

//定义每个Section 的 margin

-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

return UIEdgeInsetsMake(15, 15, 5, 15);//分别为上、左、下、右

}

//返回头headerView的大小

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

CGSize size={320,45};

return size;

}

//返回头footerView的大小

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

{

CGSize size={320,45};

return size;

}

//每个section中不同的行之间的行间距

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section

{

return 10;

}

//每个item之间的间距

//- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section

//{

// return 100;

//}

//选择了某个cell

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

{

UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];

[cell setBackgroundColor:[UIColor greenColor]];

}

//取消选择了某个cell

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

{

UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];

[cell setBackgroundColor:[UIColor redColor]];

}

效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: