iOS 中的 PSTCollectionView 中的 didSelectItemAtIndexPath / didDeselectItemAtIndexPath

didSelectItemAtIndexPath / didDeselectItemAtIndexPath in PSTCollectionView in iOS

我正在使用 PSTCollectionViewUICollectionView 合作 图书馆。我必须创建一个网格,用户可以在其中 select 和 deselect 点击 UICollectionViewCell 图片。我必须像这样显示复选框 如果单元格是 selected 的图像。如果单元格是 uncheckedBox 图像 deselected。我能够 select cell 并显示复选框 image.And 也可以deselect。但是当我select下一个cell,前一个deselect cell 也得到 selected 并显示复选框图像。这是我在 UICollectionViewCell subClass

中声明的方法
 -(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];
}

任何人都可以让我了解我的代码有什么问题吗?制作 如果我做错了什么,我会纠正。尝试了很多答案 堆栈溢出但没有任何效果。任何帮助,将不胜感激。 提前致谢。

经过几天来回的讨论。我想我终于明白你的问题到底是什么了。您一定忘记了将 allowsMultipleSelection 设置为 YES。因此,无论何时选择一个新单元格,您之前的单元格都会被取消选择。

允许多选

This property controls whether multiple items can be selected simultaneously. The default value of this property is NO.

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

indexPathsForSelectedItems

An array of NSIndexPath objects, each of which corresponds to a single selected item. If there are no selected items, this method returns an empty array.

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

覆盖自定义 UICollectionViewCell 中的 setSelected: 方法。

- (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"];
    }
}