0

テキスト付きのカスタムUIButtonが3つあり、ユーザーがボタンの1つをクリックすると、答えが正しいかどうかを確認します。それが正しい場合は、ボタンの背景を緑に設定し、赤でない場合は設定します。次に、少し遅れて次の質問を自動的に表示したいと思います(前の回答が正しいかどうかを確認するのに少し時間が必要です)。

問題は、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];

}

4

3 に答える 3

1

UIButton が次のようなカスタム タイプであることを確認します。

UIButton *myButton = [UIButton buttonWithType: UIButtonTypeCustom];

さらに、なぜNSThreadsleep を呼び出しているのですか? setwordandanswers の実行を遅らせたい場合は を使用performSelector:afterDelayし、依存関係がある場合は を使用しますNSOperationQueue addDependecy

それが役立つことを願っています。

于 2013-08-02T12:14:22.630 に答える
0

指定されたコードから次の行を取得しました。

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

これを次のように変更します。

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

それなら、うまくいくはずだと思います。

于 2013-08-02T12:25:52.300 に答える
0

メソッドで新しいボタンを作成する代わりに、送信者自体を使用してみてください。送信者のタイプを(UIButton *)( (id) で動作しない場合のみ変更します) に変更します。

- (IBAction)onClickCheckAnswer:(UIButton *)sender

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

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

:)

フィードバックをお願いします..

于 2013-08-02T12:20:51.617 に答える