在iOS开发的过程中,很多地方需要使用到列表。UITableView 和UICollectionView。记录一下留个笔记。
下面一段是来自其他大神的讲解UICollectionView详解引用一下。
UICollectionView,内容和布局完全分离的设计,UICollectionView负责界面部分,UICollectionViewlayout负责UIcollectionView的布局,具体的每个元素的布局就交给UICollectionViewLayoutAttributes,另外attributes也是可以进行扩展的,比如需要加入maskView或者改变layer的属性,都可以在attributes里面进行自己的定义。
UICollectionView 一般使用的属性
- (UICollectionView *)productCollectionView
{
if (!_productCollectionView) {
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.minimumLineSpacing = 5; //行间距
flowLayout.minimumInteritemSpacing = 5; //列间距
flowLayout.estimatedItemSize = CGSizeMake(50, 50); //预定的itemsize
flowLayout.itemSize = CGSizeMake(150, 100); //固定的itemsize
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;//滑动的方向 垂直
//初始化 UICollectionView
_productCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout];
_productCollectionView.delegate = self; //设置代理
_productCollectionView.dataSource = self; //设置数据来源
_productCollectionView.backgroundColor = kSDYBgViewColor;
_productCollectionView.bounces = YES; //设置弹跳
_productCollectionView.alwaysBounceVertical = YES; //只允许垂直方向滑动
//注册 cell 为了cell的重用机制 使用NIB 也可以使用代码 registerClass xxxx
[_productCollectionView registerNib:[UINib nibWithNibName:NSStringFromClass([ProductCollectionCell class]) bundle:nil] forCellWithReuseIdentifier:MyRecordCollectionCellIdentifier];
}
return _productCollectionView;
}
对某个cell 自定义设置size ,间距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
return 5;//可以根据section 设置不同section item的行间距
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5;// 可以根据section 设置不同section item的列间距
if (section == 5) return 10;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 1) {
return CGSizeMake(50, 50);
}
if (indexPath.section == 2 && indexPath.row == 3) {
return CGSizeMake(80, 80);
}
return CGSizeMake(100, 100);//可以根据indexpath 设置item 的size
}
cell的点击事件
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
}
DataSource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;//设置section 个数
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.dataSource.count;//根据section设置每个section的item个数
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
//cell的重用,在设置UICollectionView 中注册了cell
ProductCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MyRecordCollectionCellIdentifier forIndexPath:indexPath];
cell.productModel = self.dataSource[indexPath.row];//设置cell的数据
return cell;
}
- (void)reloadData; 重新加载数据
以上是UICollectionView 的简单使用
多选
@property (nonatomic) BOOL allowsSelection; // default is YES 允许选择
@property (nonatomic) BOOL allowsMultipleSelection; // default is NO
@property (nonatomic, readonly, nullable) NSArray<NSIndexPath *> *indexPathsForSelectedItems; // returns nil or an array of selected index paths
#else
- (nullable NSArray<NSIndexPath *> *)indexPathsForSelectedItems; // returns nil or an array of selected index paths
#endif
- (void)selectItemAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition;
- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
UICollectionViewLayoutAttributes使用UICollectionViewLayout布局详解