Ios 如何以编程方式检查外观代理?

Ios 如何以编程方式检查外观代理?,ios,Ios,我添加了以下代码,以利用较新版本操作系统的外观,而不对较旧版本执行任何操作: if ([UINavigationBar respondsToSelector:@selector(appearance)]) { [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]]; 它还可以,而且似乎正在工作 然后我打开了一堆在Xcode中默认禁用的构建警告,并开始出现错误“未实现的选择器‘外观’” 那么,在运行时检查外观是否

我添加了以下代码,以利用较新版本操作系统的外观,而不对较旧版本执行任何操作:

if ([UINavigationBar respondsToSelector:@selector(appearance)])
{
    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]]; 
它还可以,而且似乎正在工作

然后我打开了一堆在Xcode中默认禁用的构建警告,并开始出现错误“未实现的选择器‘外观’”


那么,在运行时检查外观是否存在的正确方法是什么呢?

我认为您不能。UIView头声明符合UIAppearance协议,因此您必须事先知道自己在做什么。检查外观选择器不可靠。此外,您必须知道哪些属性支持UIAppearance,因为并非所有明显的属性都支持UIAppearance

然而,如果您想知道哪些类和属性支持UIAppearance,那么还是有希望的。我已经为iOS 5添加了UIKit头,如果您对可能的更改感到好奇,我相信您也可以为iOS 6添加UIKit头。我列出了符合UIView的UIView子类

编辑:

我忘了CSmith在回答中提到的
conformsToProtocol:
方法。不管怎样,我留下这个答案,因为这个链接仍然是相关的

这样做:

if ([UIBarButtonItem conformsToProtocol:@protocol(UIAppearance)])
{
 [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];  
}