我使用UICollectionView
与PSTCollectionView
合作
图书馆。我创建了一个用户可以选择和取消选择的网格
通过点击UICollectionViewCell
来拍摄图像。我要像checkBox一样显示
如果选择了单元格,则为image如果单元格是uncheckedBox图像
取消。我可以选择cell
并显示checkBox图像
也可以取消选择。但是当我选择下一个cell
时,先前取消选择
cell
也会被选中并显示checkBox图像。这是我在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];
}
任何人都可以让我理解我的代码有什么问题吗?使 如果我做错了,我是正确的。试过很多答案 堆栈溢出但没有任何效果。任何帮助,将不胜感激。 提前谢谢。
答案 0 :(得分:1)
allowsMultipleSelection
设置为YES
。因此,无论何时选择新单元格,都会取消选择先前的单元格。
<强> allowsMultipleSelection 强>
此属性控制是否可以同时选择多个项目。此属性的默认值为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"];
}
}