0

古いバージョンでは何もせずに、新しいバージョンの OS で外観を利用するために、次のコードを追加しました。

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

正常にコンパイルされ、動作しているようです。

次に、Xcode でデフォルトで無効になっている一連のビルド警告をオンにして、「実装されていないセレクター 'appearance'」というエラーが発生し始めました。

では、外観が存在するかどうかを実行時に確認する正しい方法は何ですか?

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 ヘッダーを grep しました。変更の可能性に興味がある場合は、iOS 6 でも同じことができると確信しています。UIAppearance に準拠する UIView サブクラスのリストは、私のブログ (こちら) にあります

編集:

conformsToProtocol:CSmith が回答で言及している方法を忘れていました。とにかく、リンクがまだ関連しているため、この回答はそのままにしておきます。

于 2012-08-23T15:47:44.467 に答える