2016-09-30 17 views
-1

私は渡すペイロードに基づいて、UIButtonをインスタンス化だけでなく、このように、アクションハンドラを追加するために、単一のクラスのメソッドを使用しようとしています:addTargetを呼び出す方法:action:forControlEvents:クラスメソッドからですか?

+ (void)instantiate: (UIButton *)button with:(NSDictionary *)payload { 
    [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    button.title = payload.title; 
} 

通常、私は問題はありませんinstantiate:with:メソッドが通常のメソッドであった場合、この場合はbuttonClicked:メソッドを実装する方法がわかりません。

クラスメソッドにする必要がありますか?それはインスタンスメソッドか?また、それをクラスメソッドにする必要がある場合、addTarget:action:forControlEvents:コールの中で@selectorをどのように指定すればよいですか?

+0

セルフクラスメソッドにはアクセスできません。 – Lubakis

+0

あなたの場合、自己であると思われるものは何ですか?ボタン自体は?そのクラスは何ですか?そのクラスのシングルトンですか? – Larme

+0

@ルバキス確かに - クラスメソッドの中で使われると、実際のクラスを自己参照します。 – rmaddy

答えて

0

この場合、クラスメソッドまたはインスタンスメソッドを使用する方が良いかどうか議論するかもしれませんが、私は単純にコーディング質問に答えます。

必要に応じてクラスメソッドを使用できます。 instantiate:with:メソッドの実装は現状のまま正常です。ちょうどbuttonClicked:メソッドを追加してください。クラスメソッドである必要があります。

+ (void)buttonClicked:(UIButton *)button { 
    // do stuff 
} 
+0

自己をターゲットに追加するだけでいいですか? (例えばself.classの代わりに) – Vlad

+0

'self'はクラスメソッド内のクラスです。ですから、ターゲットに 'self'を使うだけで正しいのです。 – rmaddy

関連する問題