0

我有一个非常简单的过程,在每轮简单游戏之后计算分数,更新标签和所有正常的,非常简单的东西。我有一个 UIAlertView 通知玩家他/她的表现。我使用 UIAlertViewDelegate 来推迟所有更新、重置控件等,直到 UIAlertView 被解除。方法是 [startNewRound]、[startOver] 和 [updateLabels]。他们都在做什么是相当明显的。无论如何,当用户打到第 10 轮时,我制作了另一个 UIAlertView,通知玩家游戏已经结束并显示总分。同样,我希望使用委托将重置推迟到 AlertView 被解除之后。唯一的问题是,对于 endGame AlertView,它似乎使用的是第一个 AlertView' s 委托方法导致游戏继续新一轮而不是从头开始。我希望这是有道理的。无论如何,这是我的代码片段。

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

你不能有两个dismisswithbuttonindex的委托方法,你需要用标签来处理这种情况。

给两个警报视图一个不同的标签并在委托对象上检查它。因此,您可以区分两种警报视图。

于 2012-10-20T15:17:48.900 回答