iOS UI入门——使用Objective-C和Swift含tableViewCell的UITableViewCell基类的实现

邵耀
2023-12-01

继承是面向对象语言的一种特性,在开发中经常用到。基类的存在也大大的方便了开发,能减少很多重复的代码。

Objective-C代码:

#import "BaseTableViewCell.h"

@implementation BaseTableViewCell

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [self setupUI];
    }
    return self;
}

-(void)setupUI{
    //自定义UI布局
}

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

让自定义的UITableViewCell都继承自这个BaseTableViewCell,然后只需要重写setupUI方法,这个方法需要在.h文件中声明一下。这样的话不用在每个自定义的UITableViewCell中都写一次初始化方法。如果某几个页面的cell样式相差不大,可以把共同的地方再写一个基类,然后再写一层差异的UITableViewCell让它继承共同点多的那一层,这样就会减少很多重复的代码。

Swift代码:

import UIKit

class BaseTableViewCell: UITableViewCell {

    //必须要实现的方法,否则报错
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.setupUI()
    }

    func setupUI() {

    }

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

这是一个基类,自定义的UITableViewCell继承该类,实现setupUI()方法即可。继承的实例:

import UIKit

class CustomTableViewCell: BaseTableViewCell {

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setupUI() {

    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}

这个基类只是简单的提供了渲染UI的方法,如果直接用字典赋值的话,也可以写一个赋值更新UI的方法来继承,如果是用model的话,可以用id,也可以不提供赋值的方法,看个人开发习惯

 类似资料: