我有一个自定义UICollectionViewCell,它有一个枚举属性,定义了两种类型的单元格。假设一个有一个imageView而另一个有一个UILabel。在这两种类型中,还有其他属性彼此相同。在cellForItemAtIndexPath:方法中,我有:
CustomCollectionViewCell *cell = (CustomCollectionViewCell*)[self.collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
cell.typeOfCell = enumCellType1; // or enumCellType2
并在CustomCollectionViewCell初始化程序(initWithFrame :)中应该分配什么?在这一点上,我仍然不知道它是什么类型的细胞。
我使用layoutSubviews来设置所有常见属性的框架,此时我知道typeOfCell值,所以我可以设置imageView或UILabel框架。但其中一个必须先在initalizer中分配。
如果我有自定义初始化程序,我可以发送正确的类型并设置属性但不起作用,我试过了。
是否可以创建自定义初始化器,还是需要创建2个自定义CollectionViewCells?
我没有使用任何xib。
感谢。
答案 0 :(得分:1)
为什么不使用继承?创建一个超类,执行所有常见设置,然后创建两个子类来执行特定设置。然后,您将拥有两个不同的重用标识符,并直接在cellForItemAtIndexPath:
设置单元格“类型”忽略了面向对象的继承,并且还会导致重用问题。