-1

オブジェクトを NSNotification のセレクターに送信したい。つまり、3 つのボタンがあり、各ボタンをクリックすると通知を登録し、そのイベントが発生したときに 1 つのセレクターを呼び出し、そのセレクターでユーザーがどのボタンを持っているかを調べたい3つのボタンすべてに共通のアクションがあるため、クリックしました。

-(void)allThreeButtonAction:(sender)id
{
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performSomeOperationWhenEventOccur) name:@"EventCompletedNotification" object:nil];
}

//何らかのイベントが発生したので、通知を送信します

[[NSNotificationCenter defaultCenter] postNotificationName:@"EventCompletedNotification" object:nil];

//通知されたメソッド

-(void)performSomeOperationWhenEventOccur
{
    //Here I want to know which button is pressed.
}

私がはっきりしていることを願っています。

4

3 に答える 3

4

NSNotificationCenter のドキュメントpostNotificationName:object:userInfo:から見たいと思うかもしれません

セレクターで取得したボタン (最も簡単なのはボタンへのポインター) を識別するために必要なものを含む UserInfo を送信するだけです。

あなたのセレクタ署名は通知を受け取るはずです:

- (void)performSomeOperationWhenEventOccur:(NSNotification*) notification:(NSNotification*) notification
{
    // Use [notification userInfo] to determine which button was pressed...
}

登録時にセレクター名を変更することを忘れないでください。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performSomeOperationWhenEventOccur:) name:@"EventCompletedNotification" object:nil];
于 2012-06-06T14:09:04.797 に答える
0

通知オブザーバーを追加するときにオブジェクトを渡すことはできないため、押されたボタンをどこかに保存する必要があります。

-(void)allThreeButtonAction:(id)sender
{
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performSomeOperationWhenEventOccur) name:@"EventCompletedNotification" object:nil];
   self.buttonPressed = sender;
}

次に、通知ハンドラーでそれを読み取ることができます。

-(void)performSomeOperationWhenEventOccur
{
    if ( self.buttonPressed = self.button1 )
        ...
}
于 2012-06-06T14:25:09.453 に答える
-2

以下のスニペットが役立ちます。

ボタン1

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performSomeOperationWhenEventOccur:) name:@"button1" object:button1];

ボタン2

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(performSomeOperationWhenEventOccur:) name:@"button2" object:button2];

メソッドを次のように変更します

- (void) performSomeOperationWhenEventOccur:(NSNotification *) notification
{
    if ([[notification name] isEqualToString:@"button1"])
    {
        NSButton *button1=[notification button1];
        NSLog (@"Successfully received the test notification! from button1");
    }
     else
    {
        NSButton *button2=[notification button2]; 
        NSLog (@"Successfully received the test notification! from button2");
    } 
}
于 2012-06-06T14:18:14.987 に答える