UIAlertView и определение того, что нажимается - PullRequest
1 голос
/ 26 февраля 2010

У меня есть код, который, когда пользователь попадает в конец игры, запрашивает его, если он захочет сыграть снова:

-(void)showAlert
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@" B U S T E D ! " 
                                                    message:@"Sorry, you busted!\n\nWant to try your luck 1 More Time! ?" 
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"New Game", nil];
    [alert show];
    [alert release];
}


- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    // the user clicked one of the OK/Cancel buttons
    if (buttonIndex == 0)
    {
        //here is where we can close it
    }
    if (buttonIndex == 1)
    {
        [self createNewGame];
    }
}

Теперь я хочу также проверить, когда пользователь впервые запускает приложение, чтобы увидеть, существует ли файл предыдущей игры, и если да, спросить, хотят ли они продолжить. Я знаю, что могу сделать через:

-(void)priorGameExists
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@" Previous Game Exists ! " 
                                                    message:@"A previous game currently exists.  Would you like to resume that game?" 
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"Resumse", nil];
    [alert show];
    [alert release];
}   

Но как мне перейти на новый "пользовательский" clickedButtonAtIndex? Правильно ли я считаю, что это связано с настройкой другого делегата? И если так, как бы я это сделал?

Ответы [ 4 ]

4 голосов
/ 26 февраля 2010

Вам не обязательно нужен другой делегат. Прочитайте мой ответ на этот вопрос:

0 голосов
/ 26 февраля 2010

Вы можете использовать другой делегат, но более простой способ - установить для свойства tag уникальное значение. Если бы tag было, скажем, 10, вы бы знали, что это было из исходного предупреждения, а если бы было 20, то это было бы из вопроса priorGameExits. (Вы, вероятно, должны использовать константы, конечно.)

0 голосов
/ 26 февраля 2010

Одним из решений является объявление некоторого UIAlertView в качестве экземпляра частного класса, например:

@interface myViewControllerInterface : UIViewController {
@private
   UIAlertView *newGameAlert;
   UIAlertView *resumeGameAlert;
}

Затем в вашем контроллере вида вы можете создать свои alertViews, используя их:

-(void)showAlert {
 newGameAlert= [[UIAlertView alloc] initWithTitle:@" B U S T E D ! " 
         message:@"Sorry, you busted!\n\nWant to try your luck 1 More Time! ?" 
           delegate:self cancelButtonTitle:@"Cancel" 
        otherButtonTitles:@"New Game", nil];
 [newGameAlert show];
 [newGameAlert autorelease];
}

-(void)priorGameExists {
 resumeGameAlert = [[UIAlertView alloc] initWithTitle:@" Previous Game Exists ! " 
         message:@"A previous game currently exists.  Would you like to resume that game?" 
           delegate:self cancelButtonTitle:@"Cancel" 
        otherButtonTitles:@"Resumse", nil];
 [resumeGameAlert show];
 [resumeGameAlert autorelease];
} 

И, чтобы закончить, вы можете сделать различие между каждым видом предупреждений, используя их указатель:

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
   if (actionSheet == newGameAlert ) {
     //do something
   } else if (actionSheet == resumeGameAlert ) {
      //do something
   }
}
0 голосов
/ 26 февраля 2010

в вашем методе clickedButtonAtIndex проверьте заголовок входящего предупреждения.

if ([actionSheet.title isEqualToString:@" B U S T E D ! "]) {
  // do some busted stuff here
else if ([actionSheet.title isEqualToString:@" Previous Game Exists ! "]) {
  // do some previous game stuff here
}

Вы, вероятно, захотите установить эти заголовки, используя статические строки, поэтому у вас есть только строка в одном месте в вашем коде, но в основном это то, как вы это делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...