更新 UICollectionView 中不可见的单元格
Update not visible cells in UICollectionView
我的应用程序中需要一个可扩展的 UICollectionView - 所以我遇到了这个项目 (https://github.com/apploft/APLExpandableCollectionView)。它是实现展开和折叠行为的 UICollectionView 的子类。
我已扩展演示应用程序以在可展开单元格中显示 + 或 - 按钮。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
APLCollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"APLCollectionViewCell" forIndexPath:indexPath];
if (indexPath.item == 0) {
cell.label.text = [NSString stringWithFormat:@"Section %li", (long)indexPath.section + 1];
cell.backgroundColor = [UIColor colorWithRed:58./255. green:165./255. blue:192./255. alpha:1.];
cell.indentView.hidden = YES;
cell.label_OnOff.text = @"+";
} else {
cell.label.text = [NSString stringWithFormat:@"Item %li", (long)indexPath.row];
cell.backgroundColor = [UIColor colorWithRed:58./255. green:165./255. blue:192./255. alpha:.5];
cell.indentView.hidden = NO;
[cell.label_OnOff setHidden:YES];
}
return cell;
}
为了在 + 和 - 之间切换,我实现了委托方法:
- (void)collectionView:(UICollectionView *)collectionView didCollapseItemAtIndexPath:(NSIndexPath *)indexPath
{
APLCollectionViewCell *cell = (APLCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
cell.label_OnOff.text = @"+";
}
- (void)collectionView:(UICollectionView *)collectionView didExpandItemAtIndexPath:(NSIndexPath *)indexPath
{
APLCollectionViewCell *cell = (APLCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
cell.label_OnOff.text = @"-";
}
如您在屏幕截图中所见,可见单元格已正确更新。一旦我向下滚动到以前不可见的单元格,+ 按钮就会消失。
当 UICollectionView 中只有几个项目时,不会出现此问题,因此无需滚动到更多项目。
我对不可见单元格的 IndexPath 做错了什么,或者你有任何其他提示给我吗?
谢谢!
添加以下行
cell.indentView.hidden = NO;
就在 cellForItemAtIndexPath 中的 if else 条件之前。它可能对你有帮助。
谢谢巴努,
您的回答为我指明了正确的方向。 collectionview 中的单元格被重用,所以我在检查 IndexPath 时必须设置 cell.label_OnOff.hidden = NO;
和 cell.label_OnOff.hidden = YES;
。
我的应用程序中需要一个可扩展的 UICollectionView - 所以我遇到了这个项目 (https://github.com/apploft/APLExpandableCollectionView)。它是实现展开和折叠行为的 UICollectionView 的子类。
我已扩展演示应用程序以在可展开单元格中显示 + 或 - 按钮。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
APLCollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"APLCollectionViewCell" forIndexPath:indexPath];
if (indexPath.item == 0) {
cell.label.text = [NSString stringWithFormat:@"Section %li", (long)indexPath.section + 1];
cell.backgroundColor = [UIColor colorWithRed:58./255. green:165./255. blue:192./255. alpha:1.];
cell.indentView.hidden = YES;
cell.label_OnOff.text = @"+";
} else {
cell.label.text = [NSString stringWithFormat:@"Item %li", (long)indexPath.row];
cell.backgroundColor = [UIColor colorWithRed:58./255. green:165./255. blue:192./255. alpha:.5];
cell.indentView.hidden = NO;
[cell.label_OnOff setHidden:YES];
}
return cell;
}
为了在 + 和 - 之间切换,我实现了委托方法:
- (void)collectionView:(UICollectionView *)collectionView didCollapseItemAtIndexPath:(NSIndexPath *)indexPath
{
APLCollectionViewCell *cell = (APLCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
cell.label_OnOff.text = @"+";
}
- (void)collectionView:(UICollectionView *)collectionView didExpandItemAtIndexPath:(NSIndexPath *)indexPath
{
APLCollectionViewCell *cell = (APLCollectionViewCell*)[collectionView cellForItemAtIndexPath:indexPath];
cell.label_OnOff.text = @"-";
}
如您在屏幕截图中所见,可见单元格已正确更新。一旦我向下滚动到以前不可见的单元格,+ 按钮就会消失。 当 UICollectionView 中只有几个项目时,不会出现此问题,因此无需滚动到更多项目。
我对不可见单元格的 IndexPath 做错了什么,或者你有任何其他提示给我吗? 谢谢!
添加以下行
cell.indentView.hidden = NO;
就在 cellForItemAtIndexPath 中的 if else 条件之前。它可能对你有帮助。
谢谢巴努,
您的回答为我指明了正确的方向。 collectionview 中的单元格被重用,所以我在检查 IndexPath 时必须设置 cell.label_OnOff.hidden = NO;
和 cell.label_OnOff.hidden = YES;
。