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