我添加了以下代码,以便在较新版本的操作系统上使用外观,而不为旧版本执行任何操作:
if ([UINavigationBar respondsToSelector:@selector(appearance)])
{
[[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
它编译好了,似乎正在工作。
然后我打开了一堆在Xcode中默认禁用的构建警告,并开始收到错误“未实现的选择器'外观'”。
那么,如果出现外观,在运行时检查的正确方法是什么?
答案 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:
方法。无论如何,我正在离开这个答案,因为链接仍然相关。