您的位置:首页 > 移动开发 > IOS开发

collectionView学习

2015-08-02 18:48 330 查看

首先认识一下UICollectionView

[objc] view
plaincopy





NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionView : UIScrollView  

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

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

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

[objc] view
plaincopy





- (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]];  

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