didSelectItemAtIndexPath

didSelectItemAtIndexPath

我正在使用UICollectionView使用PSTCollectionView图书馆。我必须创建一个网格,用户可以在其中选择和取消选择
通过点击UICollectionViewCell获得图像。我要显示复选框
图像(如果选择了单元格)。和uncheckedBox图像,如果单元格是
取消选择。我可以选择cell并显示复选框图像。
也可以取消选择。但是当我选择下一个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"];
    }
}

这是我的didSelectItemAtIndexPathdidDeselectItemAtIndexPath
- (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。因此,每当选择一个新单元格时,您先前的单元格都会被取消选择。

allowMultipleSelection

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

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

indexPathsForSelectedItems

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

实际上,您甚至不必实现didSelectItemAtIndexPathdidDeselectItemAtIndexPath。默认情况下,这两个委托方法将为您调用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"];
    }
}

关于ios - iOS中PSTCollectionView中的didSelectItemAtIndexPath/didDeselectItemAtIndexPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27998874/

10-09 02:20