我必须实现一个国际象棋风格的网格视图来显示一些径向进度条。
我使用一些效率低下的算法来制作网格,因为UiCollectionView不使用行和列,并且它可以工作,但是当用户将集合滚动到极限并且集合的“行”从屏幕和用户释放屏幕,UICollectionViewCells重新出现,他们切换了颜色。
我知道BOOL会发生切换,但我不知道如何解决这个问题。
这是我的算法(我有两个不同的UICollectionViewCells,每种颜色一个)
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"Cell";
static NSString *identifierPair = @"CellPair";
UICollectionViewCell *cell ;
UILabel *title;
//...Creating the circle progress bar....
if ((indexPath.item % 2) == 0) {
if (isPair) {
cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifierPair forIndexPath:indexPath];
isPair = NO;
title = (UILabel *)[cell viewWithTag:12];
}
else
{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
isPair = YES;
title = (UILabel *)[cell viewWithTag:11];
}
}
else {
if (isUneven) {
cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifierPair forIndexPath:indexPath];
isUneven = NO;
title = (UILabel *)[cell viewWithTag:12];
}
else
{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
isUneven = YES;
title = (UILabel *)[cell viewWithTag:11];
}
}
//...Setting the name to the cell....
return cell;
}
答案 0 :(得分:2)
在UICollectionView
中使用单个方格背景的情况似乎更多,但由于我不确定它是否可行,您可以执行以下操作:
+ (BOOL)checkersCellAtIndexIsDark:(NSIndexPath *)indexPath {
NSInteger squareIndex = indexPath.item % 4;
return (squareIndex == 0 || squareIndex == 3);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = ([[self class] checkersCellAtIndexIsDark:indexPath])? [UIColor orangeColor] : [UIColor yellowColor];
// Set other things
return cell;
}
我不明白为什么你为不同的背景使用不同的reuseIdentifiers和titleLabels,因为我没有从屏幕上注意到,但你总是可以编辑这段代码
答案 1 :(得分:0)
您没有必要使用2个不同的单元格来更改背景。 您只需设置背景的默认颜色,当indexPath.item为偶数时,只需为单元格背景设置另一种颜色即可。 但首先设置默认颜色很重要,否则您将获得相同的结果。