人生倒计时
-
今日已经过去小时
-
这周已经过去天
-
本月已经过去天
-
今年已经过去个月
iOS中利用 runtime 一键改变字体
本文为投稿文章,作者:HenryCheng(简书)
最近公司要在5月份举办个大型的发布会,所以在这之前要把版本稳定,界面提升,所以有很多细活要干。不过,趁前两天版本刚提交上线,这两天稍微闲一点,就把之前说的利用runtime一键改变字体的方法分享出来。有人会说,改变字体不是很简单吗,我直接找到字体名替换一下不就好了?客官不要急,先坐下来吃点瓜子,听我慢慢给你说来。
1、准备
我们新建一个项目名叫ChangeFont,然后我就随便找了个名叫的字体库拖进去,里面的工程目录大概就是这样的
目录
现在我们就简单的直接在storyboard上拖了一个label一个button,约束好,像这样
storyboard
嗯,就这样,很简单,运行
运行结果
好的显示正常,没什么问题,接下来改变字体。
2、改变字体
我们之前已经把这个文件拖进去了,现在在plist文件里面配置一下。打开plist然后加入名为Fontsprovidedbyapplication的一行,在item里把我们的字体名字加进去
plist
最后我们需要保证我们确确实实是加进来了
phases
这个时候也许你已经迫不及待了,赶紧改字体,如下
//////ChangeFont////CreatedbyHenryChengon16/4/27.//Copyright2016年//import"UILabel+"import""@interfaceViewController@property(weak,nonatomic)IBOutletUILabel*myLabel;@property(weak,nonatomic)IBOutletUIButton*myButton;@@implementationViewController-(void)viewDidLoad{[superviewDidLoad];//for(NSString*familyNamein[UIFontfamilyNames]){//NSLog(@"FontFamilyName=%@",familyName);//输出字体族科名字////for(NSString*fontNamein[UIFontfontNamesForFamilyName:familyName]){//NSLog(@"\t%@",fontName);//输出字体族科下字样名字//}//}//_=[UIFontfontWithName:@"FZLBJW--GB1-0"size:17.0f];//_=[UIFontfontWithName:@"FZLBJW--GB1-0"size:17.0f];//_=10086;}-(void)didReceiveMemoryWarning{[superdidReceiveMemoryWarning];//Disposeofanyresourcesthatcanberecreated.}@运行
我们可以看到字体改变了。
如果有人说我有的想改变字体有的不想改变字体怎么办,我这里有个简单的办法就是设置tag,比如我设置label的tag为10086(随便起的),就让他字体不改变
运行结果
注意:
1、如果你是代码写控件,你不想改变字体,你只需在创建的时候设置tag为10086
2、上面代码中注释了一行
//if([selfisKindOfClass:NSClassFromString(@"UIButtonLabel")]){//return;//}这个是当时写的时候不改变button的title字体设置的,在这里你可以判断那种类型的改哪种不改,比如说你不想改button的字体,把这一句解注释即可
3、如果你是xib拉的控件,你不想改变字体,你必须在xib界面设置tag为10086,不可加载完毕后在-(void)viewDidLoad里面设置,这还是因为+(void)load这个方法
在一个程序(main函数)运行之前,所用到的库被加载到runtime之后,被添加到的runtime系统的各种类和category的+load方法就被调用;(关于这点很容易通过打印语句来验证);
如果父类和子类的+load方法都被调用,父类的调用一定在子类之前,这是系统自动完成的,子类+load中没必要显式调用[superload];;
这里只是简单的说一下,具体不理解的可以翻翻官方文档
5、最后
关于代码的解释,在工程里都已经注释的非常清楚了,这里就不多说了,不清楚的童鞋可以给我留言。具体用法很简单,你只需要将UILabel+和UILabel+拉进你的工程即可。
需要下载更多字体的可以在字体库下载,所有的代码都可以在这里下载。
最近在看swift,做了一下笔记,后面会为大家分享总结的一些swifttips。
最后,如果你有什么建议或者指正的地方请给我留言,如果喜欢或者对你有帮助的话,就请star一下吧,谢谢!







