我正在尝试初步调查(记录)我在应用程序中使用的所有字体和字体大小,字体/大小,可以通过编程方式或在 nib 文件中设置。之后,我希望也使用代码来设置字体。
(我知道字体类型动态,但是我有自动布局问题。
到目前为止,我已经有了(见下文),但理想情况下,我只想找到任何带有字体的东西,我的意思是它可以是一个导航栏,而不仅仅是按钮、标签或文本字段。
也许我可以以某种方式检查一下字体方法是否可用?
NSArray* buttonsArray = currentView.subviews;
for((UIButton*) button in buttonsArray)
{
button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16];
}
在询问对象是否响应font
或setFont:
技术上是否正常工作时,我们现在有了UIAppearance
系统,旨在为应用程序提供一致的设计。您可以执行诸如"我的所有导航栏都应为绿色"或"所有按钮都应为蓝色,但包含在...中的按钮除外。应该是黄色的"。许多属性都是可配置的,设置它就像列出所需的外观模式一样简单,例如在 applicationDidLoad:
中。
http://nscookbook.com/2013/01/ios-programming-recipe-8-using-uiappearance-for-a-custom-look/是网上提供的简短介绍之一。
使用它而不是在遍历视图树时将某些内容一起破解的好处是,它将适用于所有视图,甚至是您到目前为止尚未创建的视图。如果手动设置,则必须在每次创建视图后执行此操作,这很乏味,浪费并且容易出现错误。此外,您不太可能破坏您不想破坏的东西,例如第三方课程。
您可以通过向对象发送 -respondsToSelector: 消息来检查对象是否响应 -font,如下所示:
if ( [ obj respondsToSelector:@selector( font ) ] )
{
UIFont * font = [ (id)obj font ] ;
}
您可以分配字体的设置器是否响应:
注意:代码未测试
for(id obj in buttonsArray)
{
if ( [obj respondsToSelector:@selector(setFont:)] )
{
// do something
}
}
[obj respondsToSelector:@selector(font)];
如果方法是 retuen YES,则意味着 obj 具有字体方法。