- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { KQCategoryItemCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"KQCategoryItemCollectionViewCell" forIndexPath:indexPath]; id model = self.categoryItemList[indexPath.item]; if ([model isKindOfClass:[KQHomeCategoryModel class]]) { cell.model = self.categoryItemList[indexPath.item]; } else { if (_isHome) { cell.mainHomeModel = self.categoryItemList[indexPath.item]; } else { cell.normalModel = self.categoryItemList[indexPath.item]; } } return cell; }
时间: 2023-05-19 20:02:39 浏览: 59
这是一个 UICollectionView 的代理方法,用于返回一个 UICollectionViewCell 对象。在这个方法中,我们首先从重用池中获取一个 KQCategoryItemCollectionViewCell 对象,然后根据 indexPath 获取对应的数据模型,根据模型的类型设置不同的 cell 的属性,最后返回这个 cell。
相关问题
用Objective-C实现UICollectionView第一行展示1个item,其他行每行展示2个item
要实现UICollectionView的第一行展示1个item,其他行每行展示2个item,可以按照以下步骤进行实现:
1. 在UICollectionViewFlowLayout中设置每行展示的item数量。可以通过实现以下方法来实现:
```
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
return CGSizeMake(collectionView.frame.size.width, 100);
} else {
return CGSizeMake((collectionView.frame.size.width - 10) / 2, 100);
}
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
return 10;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 10;
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(10, 0, 10, 0);
}
```
上述代码中,如果indexPath.row为0,即为第一行,设置item的大小为整个UICollectionView的宽度。否则,设置item大小为(UICollectionView的宽度-10)/2。
2. 在UICollectionViewDataSource中设置每个section的item数量。可以通过实现以下方法来实现:
```
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 7;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell;
}
```
上述代码中,设置section的数量为1,每个section中item的数量为7个,其中第一行展示1个item,其他行展示2个item。在cellForItemAtIndexPath方法中,返回一个UICollectionViewCell,设置其背景色为红色。
通过上述步骤,就可以实现UICollectionView的第一行展示1个item,其他行每行展示2个item的布局效果。
UICollectionView添加headerView oc代码
可以使用以下代码添加UICollectionView的headerView:
```
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化UICollectionViewFlowLayout
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(100, 100);
layout.minimumLineSpacing = 10;
layout.minimumInteritemSpacing = 10;
layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
layout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 50);
// 初始化UICollectionView
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
collectionView.dataSource = self;
collectionView.delegate = self;
[self.view addSubview:collectionView];
// 注册UICollectionViewCell
[collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
// 注册UICollectionReusableView
[collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
}
#pragma mark - UICollectionViewDataSource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 10;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];
return cell;
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];
headerView.backgroundColor = [UIColor blueColor];
return headerView;
}
return nil;
}
```