集合视图旧图标未取消选中

时间:2013-06-04 16:32:11

标签: ios uicollectionview

我也要问这个问题。现在正在查看代码几个小时并尝试了所有内容,但为什么我的旧图片未被取消选择?用户应该只能选择一个图标。所选图标保存在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

1 个答案:

答案 0 :(得分:0)

我对集合视图并不十分熟悉,但它们与表视图非常相似,这是UITableviews有时会出现的问题,因此我将介绍几种可能的解决方案。

执行此操作的一种方法是在选择代码之后调用[self.collectionView reloadData]。这应该使collectionView重绘图像,只将其中一个设置为选定的图像。

但是,我不相信这会解决问题,因为出列可重复使用的单元格可能会导致为重用单元格设置“选择”值。所以或者,我想你可以使用UICollectionView的方法cellForItemAtIndexPath获取两个单元格,然后按照在main方法中设置它们的方式设置它们的选定值。这可能只是工作,但如果没有,请尝试这样做并再次调用重新加载数据。