Добавление более одного подтверждения подтверждения (UIAlertView) - PullRequest
1 голос
/ 11 января 2011

По сути, я пытаюсь добавить несколько подтверждений ... но я просто не могу заставить его работать.Независимо от того, какое подтверждение я нажимаю, кнопка «Продолжить» приводит к одной и той же вещи (тело без текста и тема с «XXXX») ... Любая идея, как заставить confimationalerts вести к различным вещам?

РЕДАКТИРОВАТЬ 2;Независимо от того, какую кнопку я нажимаю (продолжить или отклонить), приложение отправляет пользователя на mail.app ...

        -(IBAction)mail {

                    UIAlertView *mail = [[UIAlertView alloc] init];
                        [mail setTag:ALERTVIEW_MAIL_TAG];
                        [mail setTitle:@"Open mail"];
                        [mail setMessage:@"....."];
                        [mail setDelegate:self];
                        [mail addButtonWithTitle:@"Continue"];
                        [mail addButtonWithTitle:@"Dismiss"];
                        [mail show];
                        [mail release];

                    }

                    -(IBAction)feedback {
                        UIAlertView *feedback = [[UIAlertView alloc] init];
                        [feedback setTag:ALERTVIEW_TIPSA_TAG];
                        [feedback setTitle:@"Open mail"];
                        [feedback setMessage:@"....."];
                        [feedback setDelegate:self];
                        [feedback addButtonWithTitle:@"Continue"];
                        [feedback addButtonWithTitle:@"dismiss"];
                        [feedback show];
                        [feedback release];
                    }

- (void)showConfirmAlert
                    {   
                    }   

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
                   if([alertView tag] == ALERTVIEW_FEEDBACK_TAG) {
                        NSURL *url = [[NSURL alloc] initWithString:@"mailto:?subject=XXXX"];
                        [[UIApplication sharedApplication] openURL:url];
                        [url release];
                    }

        else if (buttonIndex == 1) {
        }



           else  if ([alertView tag] == ALERTVIEW_MAIL_TAG) {
                        NSString *subject = @"YYYY";
                        NSString *body = @".....";
                        NSString *path = [NSString stringWithFormat:@"mailto:?subject=%@&body=%@", subject, body];
                        NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
                        [[UIApplication sharedApplication] openURL:url];
                    }

            else if (buttonIndex == 1) {
        }

    }

Ответы [ 3 ]

5 голосов
/ 11 января 2011

Вам нужно установить tag для ваших UIAlertView объектов и включить их в вашем методе делегата, поэтому метод делегата принимает UIAlertView, так что вы можете делать вещи в зависимости от того, какой объект кнопка была нажата.

#define ALERTVIEW_MAIL_TAG     100
#define ALERTVIEW_FEEDBACK_TAG 101


- (IBAction) feedback {
   UIAlertView *feedback = [[UIAlertView alloc] init];
   [feedback setTag:ALERTVIEW_FEEDBACK_TAG];
   //...
}

- (IBAction) mail {
   UIAlertView *mail = [[UIAlertView alloc] init];
   [mail setTag:ALERTVIEW_MAIL_TAG];
}

-(void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger) buttonIndex {
  if([alertView tag] == ALERTVIEW_MAIL_TAG) {
     //do stuff...
  } else {
     //do other stuff...
  }
}
2 голосов
/ 11 января 2011

Метод делегата определяется протоколом UIAlertViewDelegate, вы не можете это изменить.Вы можете сделать 2 вещи:

  1. Использовать 2 разных делегата и указать clickedButtonAtIndex -метод для каждого класса.
  2. В методе clickedButtonAtIndex сначала проверьте, какой просмотр предупреждений отправил сообщение.Для этого требуется пометить UIAlertView (см. Ответ Джейкоба Релкина) или создать переменную экземпляра для каждого UIAlertView.
0 голосов
/ 11 января 2011

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

alertView.cancelButtonIndex = 1;

А при нажатии кнопки появляется сообщение:

if (buttonIndex == alertView.cancelButtonIndex) return;
...