我使用collectionView在从Core
database获取后显示图像.但是,除了numberOfItemsInSection& numberOfSectionsInCollectionView.代理和数据源设置正确.
单元的标识符是photoCell,类是JLTPhotoCell.
- (void)viewDidLoad { [super viewDidLoad]; _thumbNails = [[NSArray alloc]init]; // its declared,don't worry about this _thumbNails = [[LADataModelController getSingleton] getAllSignatures]; UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; [layout setItemSize:( CGSizeMake(50,50))]; [_collectionView setCollectionViewLayout:layout]; self.collectionView.delegate = self; self.collectionView.dataSource = self; [_collectionView registerClass:[JLTPhotoCell class] forCellWithReuseIdentifier:@"photoCell"]; [self.view addSubview:self.collectionView]; self.collectionView.allowsSelection = true; } - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section { NSLog(@"count %i",_thumbNails.count); return _thumbNails.count; } - (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView { return 1; } - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { if (_thumbNails.count > 0) { JLTPhotoCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath]; NSData *thumbnailData = ((LASignature*)[_thumbNails objectAtIndex:indexPath.row]).signatureImage; UIImage* thumbnailImage = [UIImage imageWithData:thumbnailData]; [cell setThumbnail:thumbnailImage]; NSLog(@"image:%@",thumbnailImage); if (!_buttonSelect.hidden) { [cell performSelected:FALSE]; } return cell; } return nil; } #pragma mark UICollectionViewDelegate Methods -(void) collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { _lastSelectedSign = [_thumbNails objectAtIndex:indexPath.row]; if (!self.buttonSelect.hidden) { JLTPhotoCell *cell = (JLTPhotoCell *)[_collectionView cellForItemAtIndexPath:indexPath]; cell.selected = FALSE; } else { [_selectedImages addObject:[_thumbNails objectAtIndex:indexPath.row]]; JLTPhotoCell *cell = (JLTPhotoCell *)[_collectionView cellForItemAtIndexPath:indexPath]; [cell performSelected:TRUE]; // _buttonDelete.enabled = _selectedImages.count > 0; } } -(void) collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath { [_selectedImages removeObject:[_thumbNails objectAtIndex:indexPath.row]]; JLTPhotoCell *cell = (JLTPhotoCell *)[_collectionView cellForItemAtIndexPath:indexPath]; [cell performSelected:FALSE]; _buttonDelete.enabled = _selectedImages.count > 0; } #pragma mark - UICollectionViewDelegateFlowLayout -(CGSize) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(50,50) ; } -(UIEdgeInsets) collectionView:(UICollectionView *)collectionView layout:(UICollectionViewFlowLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { collectionViewLayout.minimumInteritemSpacing=1; collectionViewLayout.minimumLineSpacing =2; return UIEdgeInsetsMake(1,1,1); } jltPhotoCell Class -(void) setThumbnail:(UIImage *) thumbnail { [self setThumbnail:thumbnail andWithSize:(CGSizeMake(50,50))]; } -(void) setThumbnail:(UIImage *) thumbnail andWithSize:(CGSize) size { UIImageView *thumbImageView = [[UIImageView alloc] initWithImage:thumbnail]; thumbImageView.frame = CGRectMake(0,size.width,size.height); thumbImageView.userInteractionEnabled = YES; [self.contentView addSubview:thumbImageView]; } -(void) performSelected:(bool)selected { if (selected) { UIImageView *deleteImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"delete"]]; deleteImageView.frame = CGRectMake(self.contentView.frame.size.width - 35,3,32,32); deleteImageView.tag = 123; [self.contentView addSubview:deleteImageView]; } else { UIView *v = [self.contentView viewWithTag:123]; v.hidden = YES; [self.contentView bringSubviewToFront:v]; [v removeFromSuperview]; } }
任何建议将不胜感激.谢谢.
解决方法
作为@highlycaffeinated我遇到了这个问题.但是调用invalidateLayout对我来说不起作用.
但是,在数据源工作之后分配代理.
我变了:
self.collectionView.delegate = self; self.collectionView.dataSource = self;
有:
self.collectionView.dataSource = self; self.collectionView.delegate = self;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。