第三方库类扩展举例

好处:不会修改库的内容。

2017年5月13日
一. MJExtension第三方库默认去掉系统返回的数据

1.注意可以扩展类函数 (不能覆盖原有 扩展类实现过的函数)

a.正确(原因:mj_ignoredPropertyNames 是协议里面方法,)

//  HuExercisesModel.h
@interface NSObject (MJExtension)
/**
 *  这个数组中的属性名将会被忽略:不进行字典和模型的转换
 */
+ (NSArray *)mj_ignoredPropertyNames;

@end

//  HuExercisesModel.m

@implementation NSObject (MJExtension)
/**
 *  这个数组中的属性名将会被忽略:不进行字典和模型的转换
 */
+ (NSArray *)mj_ignoredPropertyNames
{
    //默认忽略 过滤掉系统自动添加的元素
    return @[@"hash",@"debugDescription",@"description",@"superclass"].mutableCopy;
}

@end

b.错误(不成功)

@interface NSObject (MJExtension)

+ (NSMutableArray *)mj_totalIgnoredPropertyNames
{
    return @[@"hash",@"debugDescription",@"description",@"superclass"].mutableCopy;
}

@end

原因:上面方法库里面本来就扩展过了

//  NSObject+MJClass.m
+ (NSMutableArray *)mj_totalIgnoredPropertyNames
{
    return [self mj_totalObjectsWithSelector:@selector(mj_ignoredPropertyNames) key:&MJIgnoredPropertyNamesKey];
}

二.网易云信扩展,生产自定义的聊天界面
1.实现

//  HuSessionViewController.h
//不直接修改第三方库不修改,通过扩展的方式修改第三方未暴露的接口
@interface NIMInputView (HUNTES)

- (void)setCustomerUILayout:(UIViewController*)vc;

@end

//  HuSessionViewController.m
@implementation NIMInputView (HUNTES)

- (void)setCustomerUILayout:(UIViewController*)vc
{
    UIButton *imageBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [imageBtn setImage:[UIImage imageNamed:@"hu_icon_toolview_image_normal"] forState:UIControlStateNormal];
    [imageBtn setImage:[UIImage imageNamed:@"hu_icon_toolview_image_normal"]forState:UIControlStateHighlighted];
//    [imageBtn sizeToFit];
    CGRect viewFrame = self.toolBar.emoticonBtn.frame;
    CGFloat flap = 5.0f;//(第三方库是35,美工给的是30,所以加5.0偏移量)
    imageBtn.frame = CGRectMake(viewFrame.origin.x + flap, viewFrame.origin.y + flap, viewFrame.size.width, viewFrame.size.height);
    [imageBtn addTarget:vc action:@selector(onTapMediaItemPicture:) forControlEvents:UIControlEventTouchUpInside];

    self.toolBar.emoticonBtn.hidden = YES;
    [self.toolBar addSubview:imageBtn];
    [self.toolBar bringSubviewToFront:imageBtn];

}

@end

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

你可能感兴趣的:(第三方库类扩展举例)