本次版本需求要把原来的字体全改掉,由于项目中有的是代码创建的,有的是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

全局修改Lable/Button字体的更多相关文章

  1. iOS运用runtime全局修改UILabel的默认字体

    iOS运用runtime全局修改UILabel的默认字体 一.需求背景介绍 在项目比较成熟的基础上,遇到了这样一个需求,应用中需要引入新的字体,需要更换所有Label的默认字体,但是同时,对于一些特殊 ...

  2. 修改美化Matlab字体

    修改美化Matlab字体    MATLAB作为高校理工科类本科生或研究生必不可少的科研工具已经有着很多年的历史,以至于在我们的大学生活里或科研工作中,MATLAB处处闪现着它的身影,给我们带来了不少 ...

  3. delphi 修改Hint的字体和颜色

    //修改Hint的字体和颜色   public    { Public declarations }    procedure Sshowhint(var hintstr:string;var can ...

  4. Android Studio 3.1.2 修改字体(font)大小(size) 及老版本修改主题、字体、颜色 参照地址

    Android Studio 3.1.2  修改字体(font)大小(size) 步骤:File-Settings-Editor-Color Scheme-Color Scheme Font-Size ...

  5. idea 修改编辑区字体样式、大小

      idea 修改编辑区字体样式.大小 CreateTime--2018年4月26日10:36:59 Author:Marydon 设置-->Editor-->Font-->修改Fo ...

  6. 修改eclipse 代码字体大小以及文档字体大小

    1..点击[window]在弹出的窗口中选择[preferences] 2.在弹出窗口中找到依次点击General(常规)——Apprearance(外观)——Colors and Fonts(颜色和 ...

  7. Android系统移植与调试之------->如何修改Android默认字体大小和设置里面字体大小比例

    因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小.因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都 ...

  8. 李洪强iOS开发之-修改状态栏的字体的颜色

    李洪强iOS开发之-修改状态栏的字体的颜色 修改的效果: -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [ ...

  9. 线程全局修改、死锁、递归锁、信号量、GIL以及多进程和多线程的比较

    线程全局修改 x = 100 def func1(): global x print(x) changex() print(x) def changex(): global x x = 50 func ...

随机推荐

  1. C语言样式的文件操作函数

    使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...

  2. c语言 四种方法调用数组

      #include <stdio.h> /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * * ...

  3. 1、webservice的简单使用

    1.新建一个web端项目 2.点击添加项,选择web服务 3.在已经建好的项目中写一个方法 4.发布(发布方法选文件系统,web需要管理员权限) 生成文件夹: 5.配置IIS(略) 6.调用webse ...

  4. .使用 HTML+CSS 实现如图布局,border-widht 5px,一个格子大小是 50*50,hover时候边框变为红色(兼容IE6+,考虑语义化的结构)

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  5. Oracle数据库习题

    以下习题都已Oracle数据库中默认表为主体 1.列出至少有一个员工的所有部门. SELECT DISTINCT D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D. ...

  6. dede织梦后台如何修改?如何增加删除菜单?(

    织梦后台的模板存放在dede/templets下面, 登陆首页模板login.htm, 进入首页模板index_body.htm, 左侧菜单模板index_menu2.htm. 修改左侧菜单dede/ ...

  7. Sea.js学习1——初识Sea.js

    Sea.js 是一个成熟的开源项目,核心目标是给前端开发提供简单.极致的模块化开发体验. 使用 Sea.js,在书写文件时,需要遵守 CMD (Common Module Definition)模块定 ...

  8. PyCharm 远程连接linux中Python 运行pyspark

    PySpark in PyCharm on a remote server 1.确保remote端Python.spark安装正确 2.remote端安装.设置 vi /etc/profile添加一行 ...

  9. SpringMVC学习系列(9) 之 实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

  10. Difference between applicationContext.xml and spring-servlet.xml in Spring Framework

    Question: Are applicationContext.xml and spring-servlet.xml related anyhow in Spring Framework? Will ...