0

我也必须问这个问题。几个小时以来一直在查看代码并尝试了所有方法,但是为什么我的旧图片没有被取消选择?用户应该只能选择一个图标。所选图标保存在核心数据库中。所以这个图标在打开这个视图时也会被预选。但是,当他选择新图标时,该项目不会被取消选择..为什么?

#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
4

1 回答 1

0

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

一种方法是在选择代码之后调用 [self.collectionView reloadData]。这应该会导致 collectionView 重绘图像,仅将其中一个设置为选定图像。

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

于 2013-06-04T17:39:15.227 回答