我也要问这个问题。现在正在查看代码几个小时并尝试了所有内容,但为什么我的旧图片未被取消选择?用户应该只能选择一个图标。所选图标保存在Core Database中。因此,打开此视图时也会预先选择此图标。但是,当他选择一个新图标时,这个项目不会被取消选择..为什么?
#import "IconSelectionCollectionViewController.h"
#import "IconSelectionCell.h"
@interface IconSelectionCollectionViewController ()
@property (nonatomic, strong) NSArray *icons;
@end
@implementation IconSelectionCollectionViewController
@synthesize mainCategory = _mainCategory;
#pragma mark Initialize model
- (void)setMainCategory:(MainCategory *)mainCategory
{
//TODO
_mainCategory = mainCategory;
self.title = mainCategory.name;
}
#pragma mark View setup
- (void)viewDidLoad
{
[super viewDidLoad];
[self.collectionView registerClass:IconSelectionCell.class forCellWithReuseIdentifier:@"IconCell"];
// Do any additional setup after loading the view.
self.icons = [NSArray arrayWithObjects:@"DefaultIcon", @"Car", @"Diploma", @"Earth", @"Flight", @"Home", @"Pen", @"Scooter", @"Ship", @"Train", nil];
self.collectionView.allowsSelection = YES;
self.collectionView.allowsMultipleSelection = NO;
}
#pragma mark Data source delegate methods
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.icons.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"IconCell";
IconSelectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.iconImageView.image = [UIImage imageNamed:[self.icons objectAtIndex:indexPath.row]];
if([self.mainCategory.icon isEqualToString:[self.icons objectAtIndex:indexPath.row]]){
cell.selected = YES;
}
return cell;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
#pragma mark Collection View Delegate methods
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
self.mainCategory.icon = [self.icons objectAtIndex:indexPath.row];
}
#pragma mark – UICollectionViewDelegateFlowLayout
- (CGSize)collectionView:(UICollectionView *)collectionView layout:
(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGSize itemSize;
itemSize.height = 62;
itemSize.width = 62;
return itemSize;
}
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(10, 10, 10, 10);
}
@end
答案 0 :(得分:0)
我对集合视图并不十分熟悉,但它们与表视图非常相似,这是UITableviews有时会出现的问题,因此我将介绍几种可能的解决方案。
执行此操作的一种方法是在选择代码之后调用[self.collectionView reloadData]。这应该使collectionView重绘图像,只将其中一个设置为选定的图像。
但是,我不相信这会解决问题,因为出列可重复使用的单元格可能会导致为重用单元格设置“选择”值。所以或者,我想你可以使用UICollectionView的方法cellForItemAtIndexPath获取两个单元格,然后按照在main方法中设置它们的方式设置它们的选定值。这可能只是工作,但如果没有,请尝试这样做并再次调用重新加载数据。