子类 UICollectionViewCell 不显示
Subclassed UICollectionViewCell is not displaying
为什么我的子classed 单元格不显示?
我试过从 Nib 和 initWithCoder
和 initWithFrame
调用 awake 但是 none 的属性正在显示
@interface PhotoCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImageView *photoImageView;
@end
在我的 .m 文件中
@implementation PhotoCollectionViewCell
-(void)awakeFromNib {
self.photoImageView.frame = self.bounds;
self.backgroundColor = [UIColor lightGrayColor];
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.photoImageView.frame = self.bounds;
self.backgroundColor = [UIColor lightGrayColor];
}
return self;
}
我的单元格在 interfacebuilder 中的 class 设置为 PhotoCollectionViewCell
并且在 interfacebuilder
中正确设置了重用标识符
@interface HomeViewController () {
NSMutableArray *photosArray;
}
@end
和homeview.m
文件
-(void)viewDidLoad {
[self.collectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:@"photoCell"];
photosArray = [[NSMutableArray alloc] init];
UIImage *placeholder = [UIImage imageNamed:@"placeholder.png"];
[photosArray addObject:placeholder];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return photosArray.count;
}
- (PhotoCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
PhotoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath];
cell.photoImageView.image = [photosArray objectAtIndex:indexPath.row];
return cell;
}
在 homeview.m 中,您应该注册 NIB 而不是 class。
UINib *cellnib = [UINib nibWithNibName:PhotoCollectionViewCell bundle:nil];
[self.collectionView registerNib:cellnib forCellReuseIdentifier:@"photoCell"];
您不需要注册 class 或 nib。这就是你在情节提要中已经在做的事情。通过注册 class,您将覆盖情节提要,您将获得您的手机,但连接了 none 个插座。
删除行...
[self.collectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:@"photoCell"];
您不需要它,因为您正在 Storyboard 中执行它。
为什么我的子classed 单元格不显示?
我试过从 Nib 和 initWithCoder
和 initWithFrame
调用 awake 但是 none 的属性正在显示
@interface PhotoCollectionViewCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UIImageView *photoImageView;
@end
在我的 .m 文件中
@implementation PhotoCollectionViewCell
-(void)awakeFromNib {
self.photoImageView.frame = self.bounds;
self.backgroundColor = [UIColor lightGrayColor];
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.photoImageView.frame = self.bounds;
self.backgroundColor = [UIColor lightGrayColor];
}
return self;
}
我的单元格在 interfacebuilder 中的 class 设置为 PhotoCollectionViewCell
并且在 interfacebuilder
@interface HomeViewController () {
NSMutableArray *photosArray;
}
@end
和homeview.m
文件
-(void)viewDidLoad {
[self.collectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:@"photoCell"];
photosArray = [[NSMutableArray alloc] init];
UIImage *placeholder = [UIImage imageNamed:@"placeholder.png"];
[photosArray addObject:placeholder];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return photosArray.count;
}
- (PhotoCollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
PhotoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"photoCell" forIndexPath:indexPath];
cell.photoImageView.image = [photosArray objectAtIndex:indexPath.row];
return cell;
}
在 homeview.m 中,您应该注册 NIB 而不是 class。
UINib *cellnib = [UINib nibWithNibName:PhotoCollectionViewCell bundle:nil];
[self.collectionView registerNib:cellnib forCellReuseIdentifier:@"photoCell"];
您不需要注册 class 或 nib。这就是你在情节提要中已经在做的事情。通过注册 class,您将覆盖情节提要,您将获得您的手机,但连接了 none 个插座。
删除行...
[self.collectionView registerClass:[PhotoCollectionViewCell class] forCellWithReuseIdentifier:@"photoCell"];
您不需要它,因为您正在 Storyboard 中执行它。