全局修改Lable/Button字体
本次版本需求要把原来的字体全改掉,由于项目中有的是代码创建的,有的是XIB中直接改的,一个一个改工作量太大,使用运行时可以很轻松的实现
首先,项目中大多数设置字体的控件有 Lable, Button等,控件的初始化,有三种方式,init,initWithFrame,awakeFromNib
所以,使用运行时替换这三个方法就可以了。
为方便在多个类中使用运行时交换方法,可以创建一个头文件 SwizzlingExchange.h ,实现我们需要的交换方法
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.
//

#import "UIButton+ChangeFont.h"
#import "SwizzlingExchange.h"#define kLableFont @"Snell Roundhand"  // 测试字体,容易看出来有没有全改掉@implementation UIButton (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.titleLabel.font.pointSize];if (font) {self.titleLabel.font = font;}return __self;
}- (instancetype)myInitWithFrame:(CGRect)rect {id __self = [self myInitWithFrame:rect];UIFont * font = [UIFont fontWithName:DefaultFont size: self.titleLabel.font.pointSize];if (font) {self.titleLabel.font = font;}return __self;
}- (void)myAwakeFromNib {[self myAwakeFromNib];UIFont * font = [UIFont fontWithName:DefaultFont size: self.titleLabel.font.pointSize];if (font) {self.titleLabel.font = font;}
}@end

iOS 全局修改字体相关推荐

  1. vue全局修改字体样式(修改成苹方)

    惯例:先看最终效果: 1.首先你要先下载你需要的字体(这里以苹方为例) 2.在你的项目 src 文件下创建一个文件夹 里面有两个文件, 一个是你需要的字体的文件,一个是 css 样式文件 3.其中 c ...

  2. Android全局修改字体大小,Android 仿微信全局字体大小调整

    image 目录 一.前言 二.效果预览 三.实现步骤 1.自定义字体调整控件 2.滑动按钮改变当前页面预览字体大小 3.返回时,保存放大倍数并重启应用 4.初始化应用时配置字体放大倍数. 四.Dem ...

  3. uniapp全局修改字体

    @font-face {font-family: uniicons;//字体src: url('/static/uni.ttf');//包路径 }

  4. iphone计算机怎么修改错误字体,终于能给iPhone修改字体了,无需越狱,仅限iOS12.4...

    对于ios设备修改字体,是越狱用户的专享,不越狱想修改难如登天 让我们既不想越狱又想修改字体的小伙伴们很是恼火 那小编今天就在无数次试验后,分享一波iOS12.4系统不越狱修改字体的方法 请小伙伴们务 ...

  5. Android安卓进阶技巧之全局自定义字体的实现

    前言 由于网上大部分教程在新版本系统中已经失效,特此记录. 一.修改TextView字体 假设现在有一个字体文件msyh.ttf:对于某个TextView来说,如果想修改它的字体,可以简单的使用如下代 ...

  6. Android 修改字体

    如有转载,请申明: 转载至 http://blog.csdn.net/qq_35064774/article/details/52950652 TextView修改字体 Typeface typefa ...

  7. 有道云笔记如何修改全局默认字体样式

    有道云笔记如何修改全局默认字体样式## 1.打开有道云笔记,点击头像 2.点击"设置"–"默认字体设置"

  8. 全局vue中修改字体样式 苹方字体 微软雅黑 亲测可用

    1.下载所需要的字体,.ttf格式本文以(PingFang.ttf 为例) 底下将会附加苹果方体-简易黑体 PINGFANG MEDIUM.tff 可自行下载其他字体样式,全局引用,方便快捷. 2.在 ...

  9. 全局替换字体,开源库更方便!!!

    序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...

最新文章

  1. PCL点云分割(2)
  2. [渝粤教育] 西南科技大学 知识产权法学 在线考试复习资料
  3. 2015春浙江省二级c语言,2015-2015年浙江省高校计算机等级考试二级C试题.doc
  4. 【转载】解决telnet无法连接 Connection refused
  5. Ayoa:让思维导图更简单,在线使用 无需安装客户端
  6. python参考手册下载_Python中文手册【Word版 】
  7. 把计算机怎么连接手机的网络助手在哪里,怎么将手机网络通过USB共享给电脑
  8. python编程软件哪个好-推荐10 款最好的 Python IDE
  9. 先定个小目标,免费360度评价(评估)反馈系统上线,开放部分源码
  10. 在火狐3中安装google工具栏
  11. 用MySQL后电脑频繁蓝屏_电脑容易蓝屏怎么办_电脑突然开始频繁蓝屏修复方法-win7之家...
  12. Spring Cloud 学习笔记
  13. 【Tornado】| 扫码签到系统雏形及思路
  14. 亚马逊网络关联是什么
  15. 带通滤波器c5000汇编语言,基于SIW技术的高选择性带通滤波器的设计与实现
  16. 【Vue项目笔记心得】Swiper插件用于轮播图
  17. 如何在 Lightly 用 JavaScript 制作俄罗斯方块游戏
  18. 软件加密系统Themida应用程序保护指南(一):应用信息界面
  19. 100集华为HCIE安全培训视频教材整理 | 源NAT技术
  20. Windows cmd 命令行清空

热门文章

  1. java算法的实际应用,工程中的算法应用 - 简单的三个例子
  2. win7系统不兼容地下城与勇士怎么办?
  3. 任意整数有几种分解方法 java_整数的分解方法
  4. JQuery AJAX向SpringMVC服务器端发送数组的坑
  5. go get下载第三方包问题的解决
  6. 《深入分析GCC 》——2.3 GNU binutils工具
  7. 搜狗输入法怎么切换为繁体_搜狗输入法繁体字切换
  8. 煽情的儿子466=随笔
  9. 278.第一个错误版本
  10. 《说英雄谁是英雄》首播,50000条弹幕词云图制作