2012-02-21 9 views
12

Objective-Cランタイムを使用して、プライベートUIGroupTableViewCellBackgroundクラス(そのスーパークラスではないUIView)にメソッド+layerClassを追加するにはどうすればよいですか?注:これはテスト用です(がセルbackgroundView & selectedBackgroundViewをどのように設定するかを参照)。クラスメソッドを動的に追加する方法は?

+0

あなた自身に取っていますか? Q/A? 5分後にあなた自身が投稿した回答? – samfisher

+5

@samfisher:これは完全に合法的なことです:http://meta.stackexchange.com/q/2706/ Mattは単に情報リポジトリに追加しています。 –

+0

ありがとう@JoshCaswell私にこれを教えてください.. !! – samfisher

答えて

16

インスタンスメソッドの代わりにクラスメソッドを動的に追加するには、​​を使用してメタクラスを取得し、そのメソッドをメタクラスに追加します。例えば:

UIKIT_STATIC_INLINE Class my_layerClass(id self, SEL _cmd) { 
    return [MyLayer class]; 
} 

+ (void)initialize { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     Class class = object_getClass(NSClassFromString(@"UIGroupTableViewCellBackground")); 
     NSAssert(class_addMethod(class, @selector(layerClass), (IMP)my_layerClass, "@:@"), nil); 
    }); 
} 

また、それをコンパイルするために取得するために、すなわち@class UIGroupTableViewCellBackgroundUIGroupTableViewCellBackgroundのカテゴリーに+layerClassメソッドを追加し、前方のクラス定義を使用して、この簡単に操作を行うことができるかもしれません。

+0

#include Kevin

0

はこの魔法を試してみてください:

+ (void)load { 
     class_addMethod(objc_getMetaClass("UIGroupTableViewCellBackground"), 
         @selector(layerClass), (IMP)my_layerClass, "@:@"), nil); 
    }); 
} 
+0

"、nil)"は間違っていますが、それはアサーションのものです。 –

関連する問題