0

我添加了以下代码以在较新版本的操作系统上使用外观,而对旧版本不做任何事情:

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

它编译正常,并且似乎正在工作。

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

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

4

2 回答 2

1

做这个:

if ([UIBarButtonItem conformsToProtocol:@protocol(UIAppearance)])
{
 [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];  
}
于 2012-08-23T15:55:18.157 回答
0

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

但是,如果您想知道哪些类和属性支持 UIAppearance,那就有希望了。我已经为 iOS 5 获取了 UIKit 标头,如果你对潜在的变化感到好奇,我相信你可以为 iOS 6 做同样的事情。我的符合 UIAppearance 的 UIView 子类列表位于我的博客,这里

编辑:

我忘记了conformsToProtocol:CSmith 在他的回答中提到的方法。无论如何,我将保留此答案,因为该链接仍然相关。

于 2012-08-23T15:47:44.467 回答