我创建了一个看起来像这样的 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”属性。它在这里很重要。

然后在加载 viewControllerUICollectionView 中 - 将其添加到 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/

10-13 04:04