Xib創(chuàng)建的cell如何被繼承

各種資料上上都說,Xib創(chuàng)建的cell不能被繼承 但是實(shí)際中是可以被繼承.

這句話正確描述應(yīng)該是不能直接被繼承.
我這里實(shí)現(xiàn)思路總結(jié)就是: 子類cell嵌套父類的xib創(chuàng)建的cell實(shí)現(xiàn)的

以xib 創(chuàng)建的 collectionCell 為例

1. 在父類cell中給父類cell添加一個屬性,類型為父類cell

@interface DTMyCourseCell : UICollectionViewCell

@property(nonatomic, assign) DTMyCourseCell *subContentView;
@end

2.重寫父類cell initWithFrame方法

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self loadViewFromNib];
    //
    }
    return self;
}

- (void)loadViewFromNib {
    UINib *nib  = [UINib nibWithNibName:@"DTMyCourseCell" bundle:[NSBundle mainBundle]];
    DTMyCourseCell *newContentView = [nib instantiateWithOwner:self options:nil].firstObject;
    newContentView.frame = self.contentView.frame;
    self.subContentView = newContentView;
    [self setValue:newContentView forKey:@"contentView"];
}

經(jīng)過以上步驟,子類cell就可以通過繼承創(chuàng)建出跟父類一模一樣的cell了,但是 子類collectionVIew 的didSelectItem代理方法卻不會執(zhí)行,子類模型賦值失敗
所以進(jìn)行下一步.

3.重寫父類的模型的set方法,解決子類模型型賦值失效問題

- (void)setModel:(SuperClassModel *)model {
    _model = model;

    if (self.subContentView) {
        self.subContentView.model = model;
    }
  

4.重寫子類hitTest方法,當(dāng)然也可以在父類重寫,不過建議在子類重寫

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    UIView *view = [super hitTest:point withEvent:event];
    if (view) {
        if ([view isKindOfClass:[UIButton class]]) {
            return view;
        }

        for (UIView* next = [view superview]; next; next = next.superview) {
            UIResponder* nextResponder = [next nextResponder];
            if ([nextResponder isKindOfClass:[self class]]) {
                    return (UIView *)nextResponder;
            }
        }
    }
    return view;
}

這樣子類就可以接受點(diǎn)擊事件了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容