我正在使用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"];
}
}
这是我的
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
。因此,每当选择一个新单元格时,您先前的单元格都会被取消选择。
allowMultipleSelection
此属性控制是否可以同时选择多个项目。此属性的默认值为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"];
}
}
关于ios - iOS中PSTCollectionView中的didSelectItemAtIndexPath/didDeselectItemAtIndexPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27998874/