如何更改单元格外的iOS UICollectionViewCell背景?
例如,我有一个实现UICollectionViewDelegate
方法的视图控制器:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER];
}
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];
if (condition)
{
[self actionOne];
cell.backgroundColor = [UIColor redColor];
}
else
{
[self actionTwo];
cell.backgroundColor = [UIColor greenColor];
}
return YES;
}
if (condition)
语句中的断点显示,执行了所需的行。但遗憾的是,细胞背景保持不变......
更重要的是,我成功地做了同样的事情UICollectionViewDataSource
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];
cell.backgroundColor = [UIColor orangeColor];
}
我做错了什么?
答案 0 :(得分:0)
这应该这样做:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
MyCollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
if (condition)
{
[self actionOne];
cell.backgroundColor = [UIColor redColor];
}
else
{
[self actionTwo];
cell.backgroundColor = [UIColor greenColor];
}
}
答案 1 :(得分:0)
尝试cellForRowAtIndexPath
代替dequeueReusableCellWithReuseIdentifier
。
编辑:仅限于shouldSelectItemAtIndexPath
。
说明:dequeueReusableCellWithReuseIdentifier
将为您提供一个新单元格,您可以更改其背景颜色,但该单元格永远不会添加到表格中,因此您将无法看到它。当您使用cellForRowAtIndexPath
时,您将从表格中获取一个单元格进行编辑。