2016-07-21 179 views
0

我成功創建了具有3個標籤的自定義UICollectionViewCell。繼承自定義的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

在視圖控制器我有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,使用相同的廈門國際銀行如以前:

@interface ChildCell : ParentCell 
@property (nonatomic, strong) NSDate* dateToDislpay;//labels of parentCell updated using dateformatters on setDateToDisplay: 
@end 

-(void)setupCollectionView離開一樣,註冊ParentCell.xib爲ParentCellIdentifier

-(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

添加編輯:它無法識別的選擇發送到實例。 – izik461

回答

0

你需要去到廈門國際銀行文件,並改變類類型爲ChildCell,並應解決您的崩潰。

要繼承在這裏看到:https://stackoverflow.com/a/5056886/848719

你必須重寫initWithFrame:awakeFromNib

+0

這就是我所做的。然而,我想要使用xib中的ParentClass,因爲我將使用父類的xib爲不同的標籤格式化程序創建多個子類。 – izik461

+0

我更新了答案。 – kurryt

0

你有崩潰,因爲你必須註冊[UINib nibWithNibName:@"ParentCell" bundle:nil]母細胞,並在細胞爲你創建的ChildCell對象,但因爲它是母細胞沒有子女細胞 和親代細胞不具有dateToDislpay財產。

您可以檢查相同的帶打印類

你正在做的繼承走錯了路,你應該閱讀一些教程或閱讀一些演示

+0

我知道,我在我的問題中提到過。真正的問題是如何針對不同類別的視圖使用相同的xib。 – izik461

+0

沒有理由我可以在這裏看到,你爲什麼要服用父細胞,父細胞包含IBOutlets這是弱 –