Ios Obj-C,如何为具有字体属性的视图迭代所有视图?

Ios Obj-C,如何为具有字体属性的视图迭代所有视图?,ios,objective-c,cocoa-touch,uifont,Ios,Objective C,Cocoa Touch,Uifont,我试图首先调查(记录)我在应用程序中使用的所有字体和字体大小,字体/大小,这些可以通过编程或在nib文件中设置。之后,我希望使用代码来设置字体也 (我知道字体类型动态,但我有自动布局问题。) 到目前为止,我已经做到了(见下文),但理想情况下,我只想找到任何带有字体的东西,我的意思是它可以是一个导航栏,而不仅仅是按钮、标签或文本字段 也许我可以检查一下字体方法是否可用 NSArray* buttonsArray = currentView.subviews; for((UIButton*) bu

我试图首先调查(记录)我在应用程序中使用的所有字体和字体大小,字体/大小,这些可以通过编程或在nib文件中设置。之后,我希望使用代码来设置字体也

(我知道字体类型动态,但我有自动布局问题。)

到目前为止,我已经做到了(见下文),但理想情况下,我只想找到任何带有字体的东西,我的意思是它可以是一个导航栏,而不仅仅是按钮、标签或文本字段

也许我可以检查一下字体方法是否可用

NSArray* buttonsArray = currentView.subviews;

for((UIButton*) button in buttonsArray)
{
     button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16];
}

您可以通过发送-respondsToSelector:消息来检查对象是否响应-font,如下所示:

if ( [ obj respondsToSelector:@selector( font ) ] )
{
    UIFont * font = [ (id)obj font ] ;
}

您可以通过发送-respondsToSelector:消息来检查对象是否响应-font,如下所示:

if ( [ obj respondsToSelector:@selector( font ) ] )
{
    UIFont * font = [ (id)obj font ] ;
}

您可以指定字体设置器是否响应:

注意:代码没有经过测试

for(id obj in buttonsArray)
{
    if ( [obj respondsToSelector:@selector(setFont:)] )
    {
        // do something
    }
}

您可以指定字体设置器是否响应:

注意:代码没有经过测试

for(id obj in buttonsArray)
{
    if ( [obj respondsToSelector:@selector(setFont:)] )
    {
        // do something
    }
}
如果方法是retuen YES,则表示obj具有字体方法


如果方法是retuen YES,则表示obj有字体方法。

当询问对象是否响应
font
setFont:
在技术上有效时,我们现在有了
UIAppearance
系统,该系统旨在为应用程序提供一致的设计。你可以做“我所有的导航栏都应该是绿色的”,或者“所有的按钮都应该是蓝色的,除了……中包含的按钮应该是黄色的”。许多属性都是可配置的,设置它就像在
applicationidload:
中列出所需的外观模式一样简单

这是网上提供的简短介绍之一


使用它而不是在遍历视图树时将某些东西拼凑在一起的好处是,它将适用于所有视图,即使是迄今为止尚未创建的视图。如果手动设置,则必须在每次创建视图后进行设置,这既繁琐又浪费,而且容易出现错误。另外,你也不太可能破坏你不想破坏的东西,比如第三方类。

当询问对象是否响应
font
setFont:
在技术上可行时,我们现在有了
UIAppearance
系统,该系统旨在为应用程序提供一致的设计。你可以做“我所有的导航栏都应该是绿色的”,或者“所有的按钮都应该是蓝色的,除了……中包含的按钮应该是黄色的”。许多属性都是可配置的,设置它就像在
applicationidload:
中列出所需的外观模式一样简单

这是网上提供的简短介绍之一



使用它而不是在遍历视图树时将某些东西拼凑在一起的好处是,它将适用于所有视图,即使是迄今为止尚未创建的视图。如果手动设置,则必须在每次创建视图后进行设置,这既繁琐又浪费,而且容易出现错误。此外,您不太可能破坏您不想破坏的东西,例如第三方类。

为什么不使用“外观”类来设置它们?我不知道你是什么意思,我用谷歌快速搜索了一下,你的意思是,也许你可以给我一个网址,澄清你的观点?提前谢谢/请看下面我的答案为什么不使用“外观”类来设置它们?我不知道你是什么意思,我用谷歌快速搜索了一下,你的意思是,也许你可以给我一个网址,澄清你的观点?提前感谢/请看下面我的答案可能值得第二次或第三次发布?抱歉,我的回复速度有点慢。可能值得第二次或第三次发布?抱歉,我的回复速度有点慢。问题,我是否必须使用动态字体属性,如标题和标题,来区分不同的大小,从那篇文章中可以看出,对于不同的尺寸,什么是最好的方法?这看起来确实像是要做的:)谢谢。不,你应该能够像以前一样设置“正常”字体。:)所以我必须删除设置字体的代码,因为这会覆盖这些字体?是的。UIAppearance功能适用于所有视图,如果您愿意,可以稍后覆盖它们。为了清楚起见,当您说override时,我只会以正常方式设置字体?问题是,我是否必须使用动态类型字体属性(如标题和标题)来区分不同的大小,可以在那篇文章中看到,对于不同的尺寸,最好的方法是什么?这看起来确实像是要做的:)谢谢。不,你应该能够像以前一样设置“正常”字体。:)所以我必须删除设置字体的代码,因为这会覆盖这些字体?是的。UIAppearance可以在所有视图上运行,如果您愿意,您可以稍后覆盖它们。只是要清楚,当您说覆盖时,我会以正常方式设置字体?