你怎么能以编程方式检查外观代理?

时间:2012-08-23 15:35:53

标签: ios

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

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

它编译好了,似乎正在工作。

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

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

2 个答案:

答案 0 :(得分:1)

这样做:

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

答案 1 :(得分:0)

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

但是,如果你想知道哪些类和属性支持UIAppearance,那就有希望了。我已经为iOS 5浏览了UIKit标题,如果你对潜在的变化感到好奇,我相信你可以为iOS 6做同样的事情。我符合UIAppearance的UIView子类列表只有on my blog, here

修改

我忘记了CSmith在他的回答中提到的conformsToProtocol:方法。无论如何,我正在离开这个答案,因为链接仍然相关。