如何确定哪个按钮被按下了三个按钮
我有三个按钮,他们都做同样的事情执行segue。全部链接到相同的连接。如何确定哪个按钮被按下了三个按钮
- (IBAction)difficultyButtonPressed:(id)sender {
// Any difficulty selected
[self performSegueWithIdentifier:@"mainGameTurnGuess" sender:self];
}
我需要做的是确定在prepareForSegue
方法中按下了哪个按钮。我如何判断三个按钮中的哪一个被按下。
没有看按钮上的措辞/文字,因为这将改变本地化。
就可以使用标记值ditermine丈量按钮假设你有一个实例树按钮: -
@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];
}
}
对于信息
如果您使用的是IBAction
id
那么你得到的按钮对象,如: -
- (IBAction)difficultyButtonPressed:(id)sender {
UIButton *button = (UIButton *)sender;
NSLog(@"Button tag is %d",button.tag);
}
店在一个实例变量按钮的标签,并期待在该变量时prepareForSegue被称为
您可以转发sender
参数发送到difficultyButtonPressed:
,因为这是按下的按钮。也就是说,如果你这样做:
- (IBAction)difficultyButtonPressed:(id)sender {
// Any difficulty selected
[self performSegueWithIdentifier:@"mainGameTurnGuess" sender:sender];
}
发送到prepareForSegue:sender:
将被按下的按钮sender
参数。
如果您在按钮IBAction中使用(id)而不是(UIButton *),那么id不是Button对象,那么您必须创建类似于** UIButton * button =(UIButton *)发件人的按钮对象; ** –
@NitinGohel不正确。试试看:将NSLog(@“%@”,sender)'添加到事件处理程序中,您将看到如下所示:'
您还可以使用Restoration 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参数将标识用户点击的表视图单元格。您可以使用该信息设置目标视图控制器上的数据
为每个添加不同的“标签”值。 – Wain
我有,但我如何在prepareForSegue中引用它们 – StuartM
创建它们时,请保留对按钮的强烈参考 – LuisCien