UI按钮不会更改IBAction中的背景

时间:2013-08-02 12:08:45

标签: iphone objective-c uibutton ibaction

我有3个带文本的自定义UIButton,当用户点击其中一个按钮时,我会检查答案是否正确。如果它是正确的我想要设置按钮背景绿色,如果不是红色。然后我想在稍微延迟之后自动显示下一个问题(他需要一点时间来看看之前的答案是否正确)。

问题是UIbutton背景在IBAction中没有改变,但它在setWordAndAnswers函数内部改变。我不知道为什么会这样((

以下是代码:

-(void)setWordAndAnswers{
if([[currentCollection allWards] count]>0){
    int randCard =arc4random_uniform([[currentCollection allWards] count]-1);
    currentWord=[[currentCollection allWards]objectAtIndex:randCard];
    tvMainWord.text=[currentWord originalWord];

    int wrightAnser =arc4random_uniform(2);
    for(int i=0;i[answers count];i++){
        [[answers objectAtIndex:i]setBackgroundColor:[UIColor whiteColor]];

        if(i==wrightAnser){
            [[answers objectAtIndex:i] 
            setTitle:[currentWord wordTranslate] forState:UIControlStateNormal];
        }
        else{
             [[answers objectAtIndex:i] 
             setTitle:[self getRandomAnswer] forState:UIControlStateNormal];
        }
    }
}

}

- (IBAction)onClickCheckAnswer:(id)sender {
if(!isGameRunning)
    return;
UIButton *button = (UIButton *)sender;
if([[sender title]isEqual:[currentWord wordTranslate]]){
    [button setBackgroundColor:[UIColor greenColor]];
}
else{
    [button setBackgroundColor:[UIColor redColor]];
}
[button setNeedsDisplay];
[NSThread sleepForTimeInterval:0.3f];
[self setWordAndAnswers];

}

3 个答案:

答案 0 :(得分:1)

确保UIButton的类型为custom,如下所示:

UIButton *myButton = [UIButton buttonWithType: UIButtonTypeCustom];

另外你为什么要调用NSThread睡眠?如果你想延迟执行setwordandanswers我会使用performSelector:afterDelay,或者如果你有依赖,那么使用NSOperationQueue addDependecy

希望有所帮助。

答案 1 :(得分:0)

尝试使用发件人本身,而不是在方法中创建新按钮。 并将发件人的类型更改为(UIButton *)(仅在(id)不起作用时才更改)

- (IBAction)onClickCheckAnswer:(UIButton *)sender

  if([[sender title]isEqual:[currentWord wordTranslate]]){
    [sender setBackgroundColor:[UIColor greenColor]];
}

    else{
        [sender setBackgroundColor:[UIColor redColor]];
    }

:)

请提供反馈..

答案 2 :(得分:0)

我从你给定的代码中抓取了以下几行:

UIButton *button = (UIButton *)sender;
if([[sender title]isEqual:[currentWord wordTranslate]]){

将此更改为以下内容:

UIButton *button = (UIButton *)sender;
if([[button titleForState:UIControlStateNormal] isEqual:[currentWord wordTranslate]]){

然后,我相信它应该有效。