これはばかげた質問かもしれませんが、ObjectiveCのコントロールの「イベントハンドラ」をコピーできるかどうか知りたいです。たとえば、ボタン「FIRST」がある場合、このボタンは、ユーザーがクリックするたびにメソッド「clickEventHandler」を起動します。これで「SECOND」ボタンができました。最初のボタンが何をするかに関係なく、2番目のボタンが最初のボタンと同じように機能する必要があります。
これに対する解決策を教えてください。どんなお勧めも大歓迎です。
これはばかげた質問かもしれませんが、ObjectiveCのコントロールの「イベントハンドラ」をコピーできるかどうか知りたいです。たとえば、ボタン「FIRST」がある場合、このボタンは、ユーザーがクリックするたびにメソッド「clickEventHandler」を起動します。これで「SECOND」ボタンができました。最初のボタンが何をするかに関係なく、2番目のボタンが最初のボタンと同じように機能する必要があります。
これに対する解決策を教えてください。どんなお勧めも大歓迎です。
ボタンのターゲットとアクションは通常InterfaceBuilderを使用して設定されるため、イベントを「ルーティング」する一般的な方法を使用するのが最善の解決策になると思います。したがって、両方のボタンで呼び出します。
- (IBAction)eventRouter:(id)sender
{
// Don't forget to set the button's tag in IB!
NSInteger tag = [sender tag];
switch (tag)
{
case BUTTON1_TAG:
[self button1Method:sender];
break;
case BUTTON2_TAG:
[self button2Method:sender];
break;
default
break;
}
}
その後、IBのボタンを編集しなくても、実行時にルーティングを変更できます。
編集(OPからの質問の後):
プログラムでボタンからアクション(およびターゲット)を取得するには、のプロパティにアクセスするaction
だけtarget
ですNSButtonCell
。
NSButton *button = (NSButton *)sender; // Or perhaps from an IBOutlet
id target = button.cell.target;
SEL action = button.cell.action;
// Call the button's action selector
[target performSelector:action withObject:self]; // or withObject:sender