为你的视图建立一个基类!

题目中引人注目的感叹号,在这句话的作用不是惊讶,而表达的是,应该这样做。为所有视图建立基类,利用继承和多态的特性,更好地约束视图类的代码和风格。

从代码入手

.h文件的代码
#import <UIKit/UIKit.h>

@protocol NTBasicViewProtocol <NSObject>

- (void)setUpSubViews;
- (void)setUpConstraints;

@optional

- (void)bindViewModel;

@end

@interface NTBasicView : UIView <NTBasicViewProtocol>

@end

为了更清晰地看到到代码,这里没有在代码中添加注释。那么现在就来看下代码.h文件中的代码组成,声明了NTBasicViewProtocol这个协议,协议中有两个必须实现的方法

  • setUpSubViews:设置子控件
  • setUpConstraints:设置子控件的约束(位置)

以及一个可选实现的方法

  • bindViewModel:事件绑定方法

了解了头文件声明了哪些方法之后,我们需要知道基类的实现

.m文件的代码
#import "NTBasicView.h"

@implementation NTBasicView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        // 多态性
        [self setUpSubViews];
        [self setUpConstraints];
        [self bindViewModel];
        // 共性定制
        [self setUpCommonness];
    }
    return self;
}

#pragma mark - Inner Method

- (void)setUpCommonness
{

}

#pragma mark - Override Method

- (void)setUpSubViews
{
    
}

- (void)setUpConstraints
{
    
}

- (void)bindViewModel
{
    
}

@end

代码很简单,但是要设计好基类,就需要了解继承和多态的特性。可以发现,在重写的初始化方法中,执行了协议中声明的是三个方法,以及一个内部方法

  • 协议声明的方法
    由于基类实现了协议,所以需要实现方法,但是可以发现实现方法中没有任何代码,这是因为这些方法都是为多态性来准备的,来看看这几个方法的目的:设置子视图,设置子视图约束,设置事件绑定。不难知道,这类的方法的实现内容对于每个视图都不尽相同,所以基类只提供一个空壳,留给子类去重写。同时,这些方法在基类重写的初始化方法中执行,所以子类不用关系这几个方法的调用时机,只需要放心地关心业务逻辑即可。那么调用是在何时发生的呢?当子类初始化的时候,会调用基类的初始化方法,在基类的初始化方法中又会调用子类重写的这几个协议方法。
  • 内部方法
    内部方法没有定义在协议或者是说头文件中,所以子类也无法去重写它,那么它的作用就是封装一些视图共性,不同的项目,可能会有不同的视图需求,那么将所有视图的共性抽出,封装在该方法即可。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,826评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,281评论 30 472
  • “啊~啊~,夜夜想起妈妈的话,闪闪的泪光,鲁冰花;天上的星星不说话,地上的娃娃想妈妈……” 傍晚,校园广播里循环播...
    小柠檬狂吃柚子阅读 410评论 0 0
  • “好好好!我一定改过自新,重新做人!我再也不瞧不起人了!刘哥原谅我吧!可以吗?”王霸天努力张着他那一双不大的眼睛...
    无名氏WUMINSHI阅读 344评论 1 2