好处:不会修改库的内容。
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
如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。