iOS适配器(Adapter)模式

来源:互联网 发布:js遍历对象的所有属性 编辑:程序博客网 时间:2024/06/10 02:33

适配器可以让一些接口不兼容的类一起工作,它包装一个对象然后暴漏一个标准的交互接口


具体实现步骤:

1.协议

#import <Foundation/Foundation.h>

@protocol PTabAdapterProtocol <NSObject>

-(UIColor *)buttonTintColor;

-(UIColor *)backgroundColor;

-(NSString*)tabOne;

@end


2.新建一个PTabAdapter父类,这个类实现PTabAdapterProtocol协议

#import <Foundation/Foundation.h>

#import "PTabAdapterProtocol.h"

@interface PTabAdapter : NSObject<PTabAdapterProtocol>

/**

 *  输入对象

 */

@property (nonatomic,strong)id data;


/**

 *  与输入对象建立联系

 *

 *  @param data 输入的对象

 *

 *  @return 实例对象

 */

- (instancetype)initWithData:(id)data;

@end


#import "PTabAdapter.h"

@implementation PTabAdapter

- (instancetype)initWithData:(id)data {

    self = [superinit];

    if (self) {

        self.data = data;

    }

    returnself;

}

-(UIColor *)buttonTintColor

{

    returnnil;

}

-(UIColor *)backgroundColor

{

    returnnil;

}

-(NSString*)tabOne

{

    returnnil;

}


3.新建 PBeautyEntityAdapter子类,他的父类为PTabAdapter

#import "PTabEntity.h"

@implementation PBeautyEntityAdapter

- (instancetype)initWithData:(id)data

{

    self = [superinit];

    if (self) {

        self.data = data;

    }

    returnself;

}

-(UIColor *)buttonTintColor

{

    PTabEntity *data =self.data;

    return data.buttonTintColor;

}

-(UIColor *)backgroundColor

{

    PTabEntity *data =self.data;

    return data.backgroundColor;

}

-(NSString*)tabOne

{

    PTabEntity *data =self.data;

    return data.tabOne;

}

@end


4.新建一个model

#import <Foundation/Foundation.h>


@interface PTabEntity : NSObject


/**

 *  选项卡1名称

 */

@property (nonatomic,strong)NSString *tabOne;

/**

 *  按钮字体颜色

 */

@property (nonatomic,strong)UIColor  *buttonTintColor;

/**

 *  控件背颜色

 */

@property (nonatomic,strong)UIColor  *backgroundColor;


#import "PTabEntity.h"

@implementation PTabEntity

@end


5.模型赋值

- (void)loadTabData

{

    PTabEntity *tabEntity = [[PTabEntityalloc]init];

    tabEntity.tabOne            =@"详情";

    tabEntity.buttonTintColor   =RGBAColor(96,174,243,1);

    tabEntity.backgroundColor   =RGB(0xd8d8d8,1);

    self.tabAdapter = [[PBeautyEntityAdapteralloc]initWithData:tabEntity];

}


6.新建一个PTabControlViewView

#import <UIKit/UIKit.h>

#import "PTabAdapterProtocol.h"

@interface PTabControlView :UIView


+ (PTabControlView *) initWithNib;

- (void)loadData:(id <PTabAdapterProtocol>)data;


@end


#import "PTabControlView.h"

#import "PTabAdapterProtocol.h"

@interface PTabControlView()

@property (weak,nonatomic)IBOutletUIButton    *tabOne;//选项卡1

@property (weak,nonatomic )id<PTabAdapterProtocol> data;

@end


@implementation PTabControlView


+ (PTabControlView *) initWithNib

{

    PTabControlView *view =nil;

    NSArray *array = [[NSBundlemainBundle]loadNibNamed:@"PTabControlView"owner:selfoptions:nil];

    for (id objin array) {

        if ([objisKindOfClass:[PTabControlViewclass]]) {

            view = (PTabControlView *)obj;

            break;

        }

    }

    return view;

}

- (void) awakeFromNib

{

    [superawakeFromNib];

}


//直接就可以赋值

- (void)loadData:(id <PTabAdapterProtocol>)data

{

    self.data = data;

    //设置按钮标题

    [self.tabOnesetTitle:[datatabOne]forState:UIControlStateNormal];

    //设置背景颜色

    self.backgroundColor = [databackgroundColor];

}

@end


7. 调用

_tabView =   [PTabControlViewinitWithNib];

[_tabViewloadData:self.tabAdapter];


0 0