继承是面向对象语言的一种特性,在开发中经常用到。基类的存在也大大的方便了开发,能减少很多重复的代码。
#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让它继承共同点多的那一层,这样就会减少很多重复的代码。
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,也可以不提供赋值的方法,看个人开发习惯