我正在构建一个测试应用程序,它是一个问题,四个可能的答案数据存储在一个plist文件中。测试人员刚刚注意到,在一个问题中,他实际上可以在计时器结束之前点击所有答案,这是一个问题,每个按钮都有上面的代码。
-(IBAction)firstbtn_Click:(id)sender
{
//first_button_clicked
[self.btnOne addTarget:self action:@selector(answerWithTag:) forControlEvents:UIControlEventTouchUpInside];
[self answerWithTag:self.btnOne.tag];
}
有什么主意吗?
发布于 2014-01-24 22:03:15
一旦一个按钮被点击,就禁用所有按钮。如果禁用除已单击的按钮之外的所有其他按钮,则可以继续单击已单击的按钮,操作可以重复。创建这样一个常见的方法。
-(void)disableButtons
{
[self.btnOne setEnabled:NO];
[self.btnTwo setEnabled:NO];
[self.btnThree setEnabled:NO];
[self.btnFour setEnabled:NO];
}
在所有的方法中调用该方法,就像这样。
-(IBAction)firstbtn_Click:(id)sender
{
//first_button_clicked
[self.btnOne addTarget:self action:@selector(answerWithTag:) forControlEvents:UIControlEventTouchUpInside];
[self answerWithTag:self.btnOne.tag];
[self disableButtons];
}
我不清楚answerWithTag:
的方法到底在做什么,但是按照它的意思,您正在为按钮单击设置answerWithTag:
的目标。问题是,如果您没有禁用这些按钮,那么在next按钮调用中,您的answerWithTag:
方法将被调用两次。
所以您可以考虑将您的功能缩减为
-(IBAction)firstbtn_Click:(id)sender
{
//first_button_clicked
[self answerWithTag:self.btnOne.tag];
[self disableButtons];
}
此外,如果所有按钮的操作都是相同的,并且希望只是传递答案,那么尝试在按钮上设置答案的文本,然后您可以这样做。
-(IBAction)anyButtonClicked:(id)sender
{
UIButton *button = (UIButton *)sender;
[self answerWithText:[button text]];
[self disableButtons];
}
将所有按钮的动作指定为anyButtonClicked
。这将减少代码的长度,并使其更易于管理。
https://stackoverflow.com/questions/21343198
复制相似问题