0

私は非常に単純なプロセスを実行しています。単純なゲームの各ラウンドの後、スコアが計算され、ラベルが更新され、通常の非常に単純なものがすべて実行されます。私は、プレイヤーがどのようにパフォーマンスしたかをプレイヤーに知らせる UIAlertView を持っています。UIAlertViewDelegate を使用して、UIAlertView が閉じられるまで、すべての更新、コントロールのリセットなどを延期します。メソッドは [startNewRound]、[startOver]、および [updateLabels] です。彼らが何をしているのかは明らかです。とにかく、ユーザーがラウンド 10 に達したときに、ゲームが終了したことをプレーヤーに通知し、全体のスコアを表示する別の UIAlertView を作成しました。繰り返しますが、デリゲートを使用して、AlertView が閉じられるまでリセットを延期したいと考えていました。唯一の問題は、endGame AlertView では、最初の AlertView を使用しているように見えることです。のデリゲート メソッドにより、ゲームが最初からではなく、新しいラウンドで続行されます。これが理にかなっていることを願っています。とにかく、ここに私のコードのスニペットがあります。

if (round == 10){
    UIAlertView *endGame = [[UIAlertView alloc]
                            initWithTitle: @"End of Game"
                            message: endMessage
                            delegate:self
                            cancelButtonTitle:@"New Game"
                            otherButtonTitles:nil];
    [endGame show];
}
else {
    UIAlertView *alertView = [[UIAlertView alloc]
                          initWithTitle: title
                          message: message
                          delegate:self
                          cancelButtonTitle:@"Next"
                          otherButtonTitles:nil];

    [alertView show];
}

次に、デリゲート メソッド:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    [self startNewRound];
    [self updateLabels];
}

- (void)endGame:(UIAlertView *)endGame didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    [self startOver];
}

それで、それはあります。前述したように、endGame AlertView は alertView のデリゲートを使用しているように見えるため、[self startOver]メソッドをアクティブ化していません。すべてのメソッドが機能しています。AlertView が正しくないデリゲート メソッドを使用しているだけです。

よろしく、
マイク

4

2 に答える 2

2

コードを次のように変更します。

    if (round == 10){
        UIAlertView *endGame = [[UIAlertView alloc]
                                initWithTitle: @"End of Game"
                                message: endMessage
                                delegate:self
                                cancelButtonTitle:@"New Game"
                                otherButtonTitles:nil];
        endGame.tag = 111;
        [endGame show];
    }
    else {
        UIAlertView *alertView = [[UIAlertView alloc]
                              initWithTitle: title
                              message: message
                              delegate:self
                              cancelButtonTitle:@"Next"
                              otherButtonTitles:nil];
        alertView.tag = 222;
        [alertView show];
    }

デリゲートメソッドとして、

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
    {
        if(alertView.tag == 111)
        {
            [self startNewRound];
            [self updateLabels];
        }
        else if(alertView.tag == 222)
        {
            [self startOver];

        }
     }
于 2012-10-20T16:39:19.953 に答える
1

この状況をタグで処理する必要があります。

両方のアラート ビューに別のタグを付けて、デリゲート オブジェクトで確認します。したがって、両方のアラート ビューを区別できます。

于 2012-10-20T15:17:48.900 に答える