我已经成功创建了包含3个标签的自定义UICollectionViewCell。
现在我要将其子类化,添加dateToDisplay属性,并在setDateToDisplay中更改标签的字符串(使用自定义日期格式化程序)。
创建和使用parentCell:
ParentCellIdentifier.h
static NSString *ParentCellIdentifier = @"ParentCellIdentifier";
@interface ParentCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UILabel *firstLabel;
@property (strong, nonatomic) IBOutlet UILabel *secondLabel;
@property (strong, nonatomic) IBOutlet UILabel *thirdLabel;
-(void)setupDefaults;
@end
在parentCell.xib中:
类设置为ParentCell
,标识符设置为ParentCellIdentifier
在ViewController中,我有UICollectionView
:
-(void)setupCollectionView {
[_daysCollectionView registerNib:[UINib nibWithNibName:@"ParentCell" bundle:nil] forCellWithReuseIdentifier:ParentCellIdentifier];
_daysCollectionView.delegate = self;
_daysCollectionView.dataSource = self;
_daysCollectionView.backgroundColor = [UIColor clearColor];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
ParentCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ParentCellIdentifier forIndexPath:indexPath];
cell.firstLabel.text = @"first";
cell.secondLabel.text = @"second";
}
上面的设置就像一个魅力。 不,我想添加ChildCell,使用与之前相同的xib:
@interface ChildCell : ParentCell
@property (nonatomic, strong) NSDate* dateToDislpay;//labels of parentCell updated using dateformatters on setDateToDisplay:
@end
-(void)setupCollectionView
保留相同的内容,为ParentCellIdentifier注册ParentCell.xib
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
ChildCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ParentCellIdentifier forIndexPath:indexPath];
NSDate* date = [_dates objectAtIndex:indexPath.row];
cell.dateToDislpay = date; //here goes the error
当尝试设置子单元格的属性时,它会崩溃。这是正确的,因为在ParentCell.xib类中,单元格是ParentCell。 在xib中更改类后,它可以工作,但我想在xib中坚持使用我的父类,因为我将使用相同的xib,但只使用不同的格式化程序。
我该怎么做?
EDIT1: 收到了崩溃:
-[ParentCell setDateToDislpay:]: unrecognized selector sent to instance
答案 0 :(得分:0)
您需要进入xib文件并将类类型更改为ChildCell
,这样可以解决您的崩溃问题。
要继承,请参阅此处:https://stackoverflow.com/a/5056886/848719
您必须覆盖initWithFrame:
和awakeFromNib
。
答案 1 :(得分:0)
因为您已注册[UINib nibWithNibName:@"ParentCell" bundle:nil]
父级单元格并且在单元格的单元格中您创建了ChildCell
的对象,所以您崩溃了,但它是父级单元格而非子级单元格
和父单元格没有dateToDislpay
属性。
你可以用打印类检查
你正在以错误的方式做继承,你应该阅读一些教程或阅读一些演示