4

我有三个按钮,它们都做同样的事情执行一个segue。所有链接到同一个连接。

- (IBAction)difficultyButtonPressed:(id)sender {
    // Any difficulty selected
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:self];
}

我需要做的是确定在prepareForSegue方法中按下了哪个按钮。我怎么知道三个按钮中的哪个被按下了。

无需查看按钮上的措辞/文本,因为这会因本地化而改变。

4

4 回答 4

8

您可以使用标记值来确定 Taped Button,假设您有树按钮,例如:-

@property (nonatomic, strong)  UIButton *btn1;
@property (nonatomic, strong) UIButton *btn2;
@property (nonatomic, strong) UIButton *btn3;

然后设置按钮标签,如: -

btn1.tag=1;
btn2.tag=2;
btn3.tag=3;

IBAction并为每个按钮设置相同,并且:-

[btn1 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

[btn2 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

[btn3 addTarget:self action:@selector(difficultyButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

- (IBAction)difficultyButtonPressed:(UIButton*)sender
{
 NSLog(@"Button tag is %d",sender.tag);

     // you can use if else condition using sender.tag  like

      if(sender.tag==1)//first button related identifire
      {
           [self performSegueWithIdentifier:@"mainGameTurnGuess_FirstButtonIdentirier" sender:sender]; 
      }
      else if(sender.tag==2)//second button related identifier
      {
            [self performSegueWithIdentifier:@"mainGameTurnGuess_secondButtonIdentirier" sender:sender]; 
      }
      else   //Third button related identifier
      {
            [self performSegueWithIdentifier:@"mainGameTurnGuess_ThirdButtonIdentirier" sender:sender]; 
      }

}

信息

如果您正在使用idIBAction那么您将获得如下按钮对象:-

- (IBAction)difficultyButtonPressed:(id)sender {
    UIButton *button = (UIButton *)sender;
    NSLog(@"Button tag is %d",button.tag);
}
于 2013-10-09T20:25:14.647 回答
0

将按钮的标签存储在实例变量中,并在调用 prepareForSegue 时查看该变量

于 2013-10-09T20:25:22.033 回答
0

您可以转发sender发送到的参数,difficultyButtonPressed:因为这是按下的按钮。也就是说,如果你这样做:

- (IBAction)difficultyButtonPressed:(id)sender {
    // Any difficulty selected
    [self performSegueWithIdentifier:@"mainGameTurnGuess" sender:sender];
}

sender发送到的参数prepareForSegue:sender:将是按下的按钮。

于 2013-10-09T20:31:50.640 回答
0

您还可以使用按钮恢复 ID。在 prepareForSegue 中,您可以执行以下操作:

UIButton *btnSender;
if ([sender isMemberOfClass:[UIButton class]])
{
    btnSender = (UIButton *)sender;
}

// Then you can reference the Restoration Id or a tag of the clicked button to do further conditional logic if you want.
if([btnSender.restorationIdentifier isEqualToString:@"myBtn1"])
{
   //do something
}

我引用苹果文档:

因为 segue 可以从多个来源触发,所以您可以使用 segue 和 sender 参数中的信息来消除应用程序中不同逻辑路径之间的歧义。例如,如果 segue 源自表格视图,则 sender 参数将标识用户点击的表格视图单元格。您可以使用该信息在目标视图控制器上设置数据

于 2014-03-20T09:12:58.033 回答