我正在构建一个测验应用 这是一个问题和四个可能的答案 数据存储在plist文件中 一切都很好,一个测试人员只是注意到虽然在一个问题他可以实际上在计时器结束之前达到所有答案 这是一个问题 每个按钮都有上面的代码
-(IBAction)firstbtn_Click:(id)sender
{
//first_button_clicked
[self.btnOne addTarget:self action:@selector(answerWithTag:) forControlEvents:UIControlEventTouchUpInside];
[self answerWithTag:self.btnOne.tag];
}
任何想法??
答案 0 :(得分:1)
单击一个按钮后禁用所有按钮。如果禁用除已单击的按钮以外的所有其他按钮,则可以继续单击已单击的按钮并重复操作。创建一个像这样的通用方法。
-(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:
的目标。问题是,如果您没有禁用按钮,那么在下一个按钮调用中,将调用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
。这将减少代码的长度,并使其更易于管理。