我对这个question的答案有相同的代码。我正在尝试实现一个自定义视图单元格,它正在这样做并一直工作直到它投射单元格并尝试分配我的自定义视图单元格的属性(因为它仍然将单元格视为UICollectionViewCell而不是CustomViewCell)。
返回的日志错误仍然存在与在viewDidLoad / loadView中注册自定义单元格相关的问题:
-[UICollectionViewCell imageView]: unrecognized selector sent to instance 0x1658c540
我在UIView中调用集合视图,而不是UIViewController,因此viewDidLoad没有类方法。我尝试在我知道首先调用的方法中实现寄存器。
如何设置注册自定义单元类?就此而言,我如何制作在实例开头运行一次的方法,如viewDidLoad方法?
如果需要更多代码,请告诉我。我会更新这个问题。
EDIT_1:
原来我在旧代码中声明了这一点,我暂时还没有梳理过。但是,@ Wyatt得到了我需要的逻辑,但似乎NSLog并没有为该方法运行。无论如何,我发现我在一些较旧的代码中注册了两次,我在一段时间内没有经过梳理,在init之后被调用。 @ Neil的回答也是正确的。谢谢你们!
答案 0 :(得分:3)
对于UIView子类,我让initWithFrame调用一些像doInit这样的方法来设置我的视图。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self doInit];
}
return self;
}
-(void)doInit
{
//do stuff here, like register collectionViewCell subclasses
}
答案 1 :(得分:3)
如果日志告诉您UICollectionViewCell
不知道imageView
是什么,那么它会准确地告诉您,您正在创建UICollectionViewCell
项目,而不是CustomViewCell
。日志报告对象的实际类,而不是代码中可能或不可能的内容。
您在创建UICollectionView
或未能创建正确类型的单元格时未能注册单元格类。
UICollectionView *collectionView = [[UICollectionView alloc] init... // omitted
[collectionView registerClass:[CustomViewCell class] forCellWithReuseIdentifier:@"CustomIdentifier"];
将细胞放入cellForItemAtIndexPath:
:
CustomViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomIdentifier" forIndexPath:indexPath];