1

これはばかげた質問かもしれませんが、ObjectiveCのコントロールの「イベントハンドラ」をコピーできるかどうか知りたいです。たとえば、ボタン「FIRST」がある場合、このボタンは、ユーザーがクリックするたびにメソッド「clickEventHandler」を起動します。これで「SECOND」ボタンができました。最初のボタンが何をするかに関係なく、2番目のボタンが最初のボタンと同じように機能する必要があります。

これに対する解決策を教えてください。どんなお勧めも大歓迎です。

4

1 に答える 1

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
于 2012-12-12T10:44:53.183 に答える