0

NSPopUpButtonプログラム内の複数の場所で使用する予定のサブクラス化したものがあります。特別な機能があるため、サブクラス化されています。

通常、アクションイベントを受信するには、コントローラークラスにメソッドを作成し、それをInterfaceBuilderに接続してアクションを処理します。たとえば、ユーザーがその中のオプションの1つを変更した場合、NSPopUpButton以下のようなInterfaceBuilderアクションメソッドにメッセージが送信されます。

- (IBAction)sourcePopUpMenuChanged:(id)sender {
    NSLog(@"sourcePopUpMenuChanged");
}

これはほとんどの場合問題ありませんが、私の場合は、コントローラークラスではなく自分自身のサブクラスにメッセージを送信するようにします。popUpMenuポップアップメニューはアプリケーションのさまざまなウィンドウに表示されるため、のインデックスを追跡するためにバックグラウンドでグローバル変数を設定しているため、これを実行したいと思います。

IBActionこのコントロールのすべてのウィンドウにイベントを作成し、毎回グローバル変数を手動で設定できることは承知していますが、これは非効率的なようです。

コントロールのいずれかのインスタンスが「アクション」メッセージを受信した場合、たとえば、のグローバル変数を設定するなど、ある種のコードを実行できる方法はありますかgIndex = PopUpMenu Index Selected

ヘルプは大歓迎です!

4

1 に答える 1

4

あなたの質問に答えるために、あなたはsendAction:to:あなたのNSPopUpButtonサブクラスのメソッドをオーバーライドしてあなたの仕事をすることができます。superアクションメッセージが通常の受信者に転送されるように、電話することを忘れないでください。

コントロールが構成されたアクションを送信する場合、sendAction:to:呼び出し元のメソッド(単一インスタンス)をsendAction:to:from:使用NSAppNSApplicationます。このメソッドは、レスポンダーチェーンに従って、アクションメッセージの最終的な受信者を見つけます。

于 2013-02-08T21:59:31.613 に答える