我创建了一个看起来像这样的 UICollectionViewCell
#import "PhotoCell.h"
@implementation PhotoCell
@synthesize imageView;
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.backgroundColor = [UIColor clearColor];
imageView = [[UIImageView alloc] initWithFrame:(CGRect){.origin = CGPointMake(4.0f, 4.0f), .size=CGRectInset(frame, 4.0f, 4.0f).size}];
imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.contentView addSubview:imageView];
}
return self;
}
@end
我从我试图设置 UICollectionView 的一个 View Controller 中调用它..这就是我调用这个类的地方
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
{
PhotoCell *cell = (PhotoCell *)[self.photoCollectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
NSDictionary *currentPhotoDict = [imageArray objectAtIndex:indexPath.row];
UIImage *imageForCollection = [UIImage imageWithData:[currentPhotoDict objectForKey:@"DImage"]];
// but I have no idea where to pass the imag....
cell.imageView.image = imageForCollection;
return cell;
}
问题是,我收到此错误,然后我的应用程序倒在一堆。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UICollectionViewCell imageView]: unrecognized selector sent to instance 0x16dc1a90'
更新
我创建了一个 .nib 文件调用 aPhotoCell 并且我已经从中删除了 UIView 并添加了一个 UIImageView。然后我将对象自定义类更改为 PhotoCell,现在我可以从 PhotoCell 看到 UIImageView 的 IBOutlet,我已经将其连接起来,但我仍然收到相同的错误。从下面的评论和答案来看,这就是我认为我必须解决的问题。
最佳答案
几件事..
在您的 PhotoCell
类中 - 声明一个公共(public)属性:
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
然后在您的
PhotoCell xib
中(我假设这是您创建它的地方?)将其连接到您创建的 IBOutLet
。我认为您在
cellForItemAtIndexPath
中做错了什么 - 因为您的错误显示 UICollectionViewCell
的一个实例没有响应 cell.imageView.image = imageForCollection;
确保您的单元格标识符也与您将其放入 Storyboard/xib 文件中的相同
像这样重写你的
cellForItemAtIndexPath
方法:- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;{
PhotoCell *cell = [ self.photoCollectionView dequeueReusableCellWithReuseIdentifier:@"CORRECT CELL IDENTIFIER HERE" forIndexPath:indexPath];
NSDictionary *currentPhotoDict = [imageArray objectAtIndex:indexPath.row];
UIImage *imageForCollection = [UIImage imageWithData:[currentPhotoDict objectForKey:@"DImage"]];
cell.imageView.image = imageForCollection;
return cell;
}
编辑
您似乎创建了
UICollectionViewCell
的子类,但从未为其创建 xib
文件。由于您没有使用 Storyboard,请执行以下操作:在Xcode中:
创建一个新文件 - 从左侧的“
User Interface
”下选择“iOS'
”,然后从它显示的选择中选择 "empty"
。创建
xib
文件后 - 转到它并删除那里的 UIView
。然后从右侧的对象库中,查找 UICollectionView Cell
并将其拖到 View 上,然后拖出一个 UIImageView
并将其放置在您的 UICollectionView cell.
中现在选择您刚刚创建的
UICollectionViewCell
并将其类设置为 PhotoCell
类。像上面一样连接你的 IBOutlets
。确保也设置了“
Reusable Cell
”属性。它在这里很重要。然后在加载
viewController
的 UICollectionView
中 - 将其添加到 viewDidLoad
[photoCollectionView registerNib:[UINib nibWithNibName:@"THE XIB FILE NAME YOU JUST CREATED eg: PhotoCell" bundle:nil] forCellWithReuseIdentifier:@"REUSE IDENTIFIER HERE"];
这应该对你有帮助。
关于ios - UICollectionViewCell 无法识别的选择器发送到实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22628749/