2012-09-19 18 views
20

[UIBarButtonItem appearance]respondsToSelectorを実行して、iOS 6固有の外観方法を検出しようとしています。しかし、それは常に私が指定したものは何でも、セレクタ、私のためNOを返します。respondsToSelectorが外観プロキシで失敗する

// Should show NOPE in iOS 5, YEP in iOS 6. Shows NOPE always 
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)] ? @"YEP" : @"NOPE"); 

// Should show YEP in both iOS 5 and iOS 6. Shows NOPE always 
NSLog(@"%@", [[UIBarButtonItem appearance] respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)] ? @"YEP" : @"NOPE"); 

実際にこれらのメソッドを使用してのiOSのそれぞれのバージョンで正常に動作しますが、私は私に利用可能である1を検出するように見えることはできません。だから私はそれをどうやって正しく行うのですか?

答えて

36

外観プロキシをチェックしないでください。プロキシだから決してそれに頼ることはできません。代わりに、新しいメソッドを持つアイテム(この場合はUIBarButtonItem)を確認してください。

BOOL hasNewMethod = [UIBarButtonItem instancesRespondToSelector:@selector(setBackgroundImage:forState:style:barMetrics:)]; 
if(hasNewMethod) 
    NSLog(@"Running iOS 6 with new method"); 
else 
    NSLog(@"Current OS doesn't support method..."); 
+1

+1あなたは素晴らしいです! – bgolson

関連する問題