0
- (IBAction)popUpAreYouSureView:(id)sender {
    self.areYouSureView.hidden = NO;
}

- (IBAction)pressedYes {
    // if sender from popUpAreYouSureView was switch, do something

    // else if sender from popUpAreYouSureView was close, do something else
} 

- (IBAction)pressedNo {
    // if sender from popUpAreYouSureView was switch, do something

    // else if sender from popUpAreYouSureView was close, do something else
} 

「switch」と「close」の 2 つのボタンがあり、どちらも popUpAreYouSureView に接続されているとします。これは、タップすると areYouSureView という名前のビューを再表示します。「よろしいですか?」view には「yes」と「no」の 2 つのボタンがあり、それぞれ pressdYes とpressedNo に接続されています。

「はい」または「いいえ」を押すと、「切り替え」または「閉じる」ボタンがビューを再表示したかどうかを確認します。ビューを再表示するボタンに応じて、さまざまなロジックを実行したいと考えています。私が直面している問題は、その情報を保存せずに、「切り替える」ボタンまたは「閉じる」ボタンがビューを再表示するかどうかをどのように知るかです。

これを行うためのクリーンな方法は何ですか? デリゲートを調べましたが、switch と close ケースの両方で同じデリゲートを渡しているため、うまくいかないようです。セレクターと同じ問題。「はい」または「いいえ」ボタンに接続されたアクションがそれを調べて、どのロジックを実行するかを理解できるように、前のアクションが切り替えボタンまたは閉じるボタンからのものかどうかを通知する (id) 送信者を保存する必要がありますか?行う?

4

3 に答える 3

0

アクションの原因を追跡する必要があります。これを回避する方法はありません。そのため、senderパラメータを有効に使用してください。

__weak UIButton* m_buttonSelected;

- (IBAction)popUpAreYouSureView:(id)sender {
    self.areYouSureView.hidden = NO;
    m_buttonSelected = (UIButton*)sender;
}

- (IBAction)pressedYes {
    // if sender from popUpAreYouSureView was switch, do something
    if ([m_buttonSelected isEqual:self.switchButton]) {
        ...
    }
    // else if sender from popUpAreYouSureView was close, do something else
    else if ([m_buttonSelected isEqual:self.closeButton]) {
        ...
    }

    m_buttonSelected = nil;
} 

- (IBAction)pressedNo {
    // if sender from popUpAreYouSureView was switch, do something
    if ([m_buttonSelected isEqual:self.switchButton]) {
        ...
    }
    // else if sender from popUpAreYouSureView was close, do something else
    else if ([m_buttonSelected isEqual:self.closeButton]) {
        ...
    }

    m_buttonSelected = nil;
} 
于 2012-11-07T22:24:05.513 に答える
0

areYouSureView ビューの "tag" プロパティを使用するのが、高速な (しかしそれほどきれいではない) 解決策です。各ボタンに異なるタグ (たとえば、閉じるには 1、スイッチには 2) を付けると、次のようなことができます。

- (IBAction)popUpAreYouSureView:(id)sender {
    self.areYouSureView.hidden = NO;
    self.areYouSureView.tag = ((UIView*)sender).tag; 
}

- (IBAction)pressedYes {
    if (self.areYouSureView.tag == 1)
        NSLog(@"Button 1");
    else
        NSLog(@"Button 2");
} 

- (IBAction)pressedNo {
    if (self.areYouSureView.tag == 1)
        NSLog(@"Button 1");
    else
        NSLog(@"Button 2");
} 
于 2012-11-07T22:25:51.413 に答える
0

あなたが試すことができるのは、ボタンのアクションを次のように再定義することですpopUpAreYouSureView:

- (IBAction)popUpAreYouSureView:(id)sender {

  if ([sender...]) {
    [self.yesButton addTarget:self action:@selector(...) forControlEvents:...];
    [self.yesButton addTarget:self action:@selector(...) forControlEvents:...];
  } else {
    [self.yesButton addTarget:self action:@selector(...) forControlEvents:...];
    [self.yesButton addTarget:self action:@selector(...) forControlEvents:...];
  }
}

少し良い解決策は、でデリゲートを使用しpressedYespressedNo実装でデリゲートを設定することですpopUpAreYouSureView

- (IBAction)popUpAreYouSureView:(id)sender {

  if ([sender...]) 
     self.buttonsDelegate = ...;
  else
     self.buttonsDelegate = ...;
}



- (IBAction)pressedYes {
    [self.delegate doYes];
} 

- (IBAction)pressedNo {
    [self.delegate doNo];
} 

どちらの方法も機能するはずです。

于 2012-11-07T22:37:51.780 に答える