首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户可以在问答应用程序上按多个UIButtons。

用户可以在问答应用程序上按多个UIButtons。
EN

Stack Overflow用户
提问于 2014-01-24 21:55:04
回答 1查看 39关注 0票数 0

我正在构建一个测试应用程序,它是一个问题,四个可能的答案数据存储在一个plist文件中。测试人员刚刚注意到,在一个问题中,他实际上可以在计时器结束之前点击所有答案,这是一个问题,每个按钮都有上面的代码。

代码语言:javascript
运行
复制
-(IBAction)firstbtn_Click:(id)sender
{
    //first_button_clicked
    [self.btnOne addTarget:self action:@selector(answerWithTag:) forControlEvents:UIControlEventTouchUpInside];
    [self answerWithTag:self.btnOne.tag];

}

有什么主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 22:03:15

一旦一个按钮被点击,就禁用所有按钮。如果禁用除已单击的按钮之外的所有其他按钮,则可以继续单击已单击的按钮,操作可以重复。创建这样一个常见的方法。

代码语言:javascript
运行
复制
   -(void)disableButtons
    {
        [self.btnOne setEnabled:NO];
        [self.btnTwo setEnabled:NO];
        [self.btnThree setEnabled:NO];
        [self.btnFour setEnabled:NO];
    }

在所有的方法中调用该方法,就像这样。

代码语言:javascript
运行
复制
-(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:方法将被调用两次。

所以您可以考虑将您的功能缩减为

代码语言:javascript
运行
复制
-(IBAction)firstbtn_Click:(id)sender
{
    //first_button_clicked
    [self answerWithTag:self.btnOne.tag];
    [self disableButtons];
}

此外,如果所有按钮的操作都是相同的,并且希望只是传递答案,那么尝试在按钮上设置答案的文本,然后您可以这样做。

代码语言:javascript
运行
复制
-(IBAction)anyButtonClicked:(id)sender
{
    UIButton *button = (UIButton *)sender;
    [self answerWithText:[button text]];
    [self disableButtons];
}

将所有按钮的动作指定为anyButtonClicked。这将减少代码的长度,并使其更易于管理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21343198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档