如何更改单元格外的 UICollectionViewCell 背景
How to change UICollectionViewCell's background outside of cell
如何在单元格外更改 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)
语句中的断点显示,执行了所需的行。但是,遗憾的是,单元格背景保持不变...
更重要的是,我成功地做了几乎相同的事情 id UICollectionViewDataSource
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];
cell.backgroundColor = [UIColor orangeColor];
}
我做错了什么?
应该这样做:
- (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];
}
}
尝试用 cellForRowAtIndexPath
代替 dequeueReusableCellWithReuseIdentifier
。
编辑:仅在 shouldSelectItemAtIndexPath
.
说明:dequeueReusableCellWithReuseIdentifier
会给你一个新的单元格,你可以改变它的背景颜色,但是那个单元格永远不会添加到 table 所以你不会看到它。当您使用 cellForRowAtIndexPath
时,您将从 table 中获取一个单元格进行编辑。
如何在单元格外更改 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)
语句中的断点显示,执行了所需的行。但是,遗憾的是,单元格背景保持不变...
更重要的是,我成功地做了几乎相同的事情 id UICollectionViewDataSource
方法:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MY_CELL_REUSE_IDENTIFIER forIndexPath:indexPath];
cell.backgroundColor = [UIColor orangeColor];
}
我做错了什么?
应该这样做:
- (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];
}
}
尝试用 cellForRowAtIndexPath
代替 dequeueReusableCellWithReuseIdentifier
。
编辑:仅在 shouldSelectItemAtIndexPath
.
说明:dequeueReusableCellWithReuseIdentifier
会给你一个新的单元格,你可以改变它的背景颜色,但是那个单元格永远不会添加到 table 所以你不会看到它。当您使用 cellForRowAtIndexPath
时,您将从 table 中获取一个单元格进行编辑。