适配器可以让一些接口不兼容的类一起工作,它包装一个对象然后暴漏一个标准的交互接口
具体实现步骤:
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.新建一个PTabControlView的View
#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];