2012-08-23 46 views
0

添加以下代码利用外观上的操作系统的新版本,而没有做任何事情对旧版本:如何以编程方式检查外观代理?

if ([UINavigationBar respondsToSelector:@selector(appearance)]) 
{ 
    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]]; 

它编译确定,似乎是工作。

然后我打开了一堆在Xcode中默认禁用的构建警告,并开始出现错误“Unimplemented selector'appearance'”。

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

回答

1

做到这一点:

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

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

但是,如果你想知道哪些类和属性支持UIAppearance,那就有希望了。我已经为iOS 5刷新了UIKit头文件,如果您对潜在的更改感到好奇,我相信你可以对iOS 6做同样的事情。我符合UIAppearance的UIView子类列表生命on my blog, here

编辑:

我忘了这一点CSmith:它提到了他的答案conformsToProtocol:方法。无论如何,我会离开这个答案,因为链接仍然是相关的。

相关问题