2

我正在UICollectionView使用PSTCollectionView 图书馆。我必须创建一个网格,用户可以通过点击来选择和取消选择图像UICollectionViewCell。如果选择了单元格,我必须显示类似于图像的复选框。如果取消选择单元格,则取消选中框图像。我可以选择cell并显示复选框图像。也可以取消选择。但是当我选择 next 时cell,先前取消选择的 cell也被选中并显示复选框图像。这是我在子类中声明的UICollectionViewCell方法

 -(void)applySelection{
    if(_isSelected){
        _isSelected=FALSE;
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"unchecked_edit_image.png"];
    }else{
        _isSelected=TRUE;
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"checked_edit_image.png"];
    }
}

这是我的didSelectItemAtIndexPath代码 didDeselectItemAtIndexPath

- (void)collectionView:(PSTCollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelect method called");
    FriendImageCell *cell = (FriendImageCell*)[imageGrid cellForItemAtIndexPath:indexPath];
        [selectedImages addObject:[[list objectAtIndex:indexPath.item] objectForKey:@"thumbnail_path_150_150"]];
         [cell applySelection];

}

- (void)collectionView:(PSTCollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"did deselect called");
    FriendImageCell *cell = (FriendImageCell*)[imageGrid cellForItemAtIndexPath:indexPath];
    [selectedImages removeObjectAtIndex:indexPath.item];
    [cell setSelected:NO];
    [cell applySelection];
}

谁能让我理解我的代码有什么问题?如果我做错了什么,请纠正我。在堆栈溢出上尝试了许多答案,但没有任何效果。任何帮助,将不胜感激。提前致谢。

4

1 回答 1

1

经过几天的来回讨论。我想我终于明白你的问题到底是什么了。您一定忘记将 设置allowsMultipleSelectionYES。So whenever a new cell is selected, your previous cells got deselected.

允许多重选择

此属性控制是否可以同时选择多个项目。此属性的默认值为 NO。

在我之前的回答中,我还建议您制作自己的布尔数组来跟踪所选项目。但是,我刚刚意识到您不必这样做。indexPathsForSelectedItems为您提供一组选定的索引路径。

indexPathsForSelectedItems

一个 NSIndexPath 对象数组,每个对象对应一个选定的项目。如果没有选定项,则此方法返回一个空数组。

事实上,您甚至不必实现didSelectItemAtIndexPath, 和didDeselectItemAtIndexPath. 默认情况下,这两个委托方法会setSelected:为您调用。因此,更合适的做法是将applySelection代码移至setSelected.

覆盖setSelected:您自定义的方法UICollectionViewCell

- (void)setSelected:(BOOL)selected
{
    [super setSelected:selected];

    // Change your UI
    if(_isSelected){
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"unchecked_edit_image.png"];
    }else{
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"checked_edit_image.png"];
    }
}
于 2015-01-17T23:40:37.457 回答