SwizzlingExchange:
#ifndef SwizzlingExchange_h
#define SwizzlingExchange_h
#import <objc/runtime.h>
static inline void swizzling_exchangeMethod(Class clazz, SEL originalSelector, SEL swizzledSelector) {
Method originalMethod = class_getInstanceMethod(clazz, originalSelector);
Method swizzledMethod = class_getInstanceMethod(clazz, swizzledSelector);
BOOL success = class_addMethod(clazz, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
if (success) {
class_replaceMethod(clazz, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}
#endif /* SwizzlingExchange_h */
然后创建我们 Lable、Button等控件的分类,在 +load方法里面 交换我们的三个函数,这样我们首次创建的控件字体就是我们的默认字体,对于某些特殊的地方使用的不是默认字体,重新设置字体就可以了。
Lable
//
// UILabel+ChangeFont.m
// DFRomwe
//
// Created by 王卫亮 on 16/7/13.
// Copyright © 2016年 heyan. All rights reserved.
//
#import “UILabel+ChangeFont.h”
#import “SwizzlingExchange.h”
#define kLableFont @“Snell Roundhand” // 测试字体,容易看出来有没有全改掉
@implementation UILabel (ChangeFont)
+(void)load {
//只执行一次这个方法
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
swizzling_exchangeMethod([self class], @selector(init), @selector(myInit));
swizzling_exchangeMethod([self class], @selector(initWithFrame:), @selector(myInitWithFrame:));
swizzling_exchangeMethod([self class], @selector(awakeFromNib), @selector(myAwakeFromNib));
});
}
- (instancetype)myInit {
id __self = [self myInit];
UIFont * font = [UIFont fontWithName:DefaultFont size: self.font.pointSize];
if (font) {
self.font = font;
}
return __self;
}
- (instancetype)myInitWithFrame:(CGRect)rect {
id __self = [self myInitWithFrame: rect];
UIFont * font = [UIFont fontWithName:DefaultFont size: self.font.pointSize];
if (font) {
self.font = font;
}
return __self;
}
- (void)myAwakeFromNib {
[self myAwakeFromNib];
UIFont * font = [UIFont fontWithName:DefaultFont size: self.font.pointSize];
if (font) {
self.font = font;
}
}
@end
Button:
//
// UIButton+ChangeFont.m
// DFRomwe
//
// Created by 王卫亮 on 16/7/13.
// Copyright © 2016年 heyan. All rights reserved.
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!