2012-08-23 71 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:方法。無論如何,我會離開這個答案,因爲鏈接仍然是相關的。

相關問題