Несколько UIAlertView; каждый со своими кнопками и действиями

Я создаю представление в Xcode 4.3 и не знаю, как указать несколько UIAlertView, которые имеют свои собственные кнопки с отдельными действиями. В настоящее время мои оповещения имеют свои кнопки, но те же действия. Ниже мой код.

-(IBAction)altdev {
    UIAlertView *alert = [[UIAlertView alloc] 

                          initWithTitle:@"titleGoesHere"
                          message:@"messageGoesHere"
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Continue", nil];
[alert show];
}

-(IBAction)donate {
    UIAlertView *alert = [[UIAlertView alloc] 

                          initWithTitle:@"titleGoesHere"
                          message:@"messageGoesHere"
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Continue", nil];
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]];
         }
}


-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]];
    }
}  

Спасибо за любую помощь!


person DiscoveryOV    schedule 04.03.2012    source источник


Ответы (5)


Есть полезное свойство tag для UIView (от которого подкласс UIAlertView). Вы можете установить разные теги для каждого представления предупреждений.

ОБНОВИТЬ:

#define TAG_DEV 1
#define TAG_DONATE 2

- (IBAction)altdev {
    UIAlertView *alert = [[UIAlertView alloc] 

                          initWithTitle:@"titleGoesHere"
                          message:@"messageGoesHere"
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Continue", nil];
   alert.tag = TAG_DEV;
   [alert show];
}

- (IBAction)donate {
    UIAlertView *alert = [[UIAlertView alloc] 

                          initWithTitle:@"titleGoesHere"
                          message:@"messageGoesHere"
                          delegate:self
                          cancelButtonTitle:@"Cancel"
                          otherButtonTitles:@"Continue", nil];
    alert.tag = TAG_DONATE;
    [alert show];
}

-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView.tag == TAG_DEV) { // handle the altdev
      ...
    } else if (alertView.tag == TAG_DONATE){ // handle the donate

    }
}
person cxa    schedule 04.03.2012
comment
Я до сих пор не очень понимаю, как я это включаю. Когда я пытаюсь вставить это, я продолжаю получать ошибки «Использование необъявленного идентификатора», независимо от того, что я делаю. Я был бы признателен, если бы вы ответили кодом, который я показал, и вашими правками. Спасибо - person DiscoveryOV; 05.03.2012
comment
Круто спасибо, отлично работает. Я уверен, вы можете сказать, что я еще не очень опытен в этом, и здорово, что есть такие люди, как вы, чтобы помочь нам. - person DiscoveryOV; 07.03.2012
comment
Гм, на самом деле теперь у меня проблема с тем, что оповещение не отменяется (просто продолжается действие для любой кнопки), когда пользователь нажимает кнопку отмены. Любое понимание? - person DiscoveryOV; 07.03.2012
comment
Я добавил еще один вариант, но мне нравится этот, поэтому я увеличил его. Не определяйте тег с 0, так как это тег по умолчанию для всех объектов (если, конечно, вам не нужно значение по умолчанию). Я предполагаю, что вы уже исправили это с помощью отмены, но это потому, что вам все еще нужно проверить кнопку. - person Recycled Steel; 03.07.2013

проще и новее

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 1;

UIAlertView *alert = [[UIAlertView alloc] init...
alert.tag = 2;



- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(alertView.tag == 1) {
        // first alert...
    } else  {
        // sec alert...
    }
}

все сделано!

person nima sp    schedule 10.08.2013

Если вам сложно использовать методы делегата для различной идентификации представления предупреждений, вы также можете использовать класс This Category для использования блока завершения для каждого AlertView.

Alert_ActionSheetWithBlocks

Например.

UIAlertView* alert1 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 1" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];

[alert1 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex){ //--AlertView1 Stuff here }];

UIAlertView* alert2 = [[UIAlertView alloc] initWithTitle:@"AlertView+Block 2" message:@"WithBlocks" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert2 showWithFinishBlock:^(UIAlertView *alertView, NSInteger buttonIndex){ //--AlertView2 Stuff here }];

Я надеюсь, что это самый простой способ по сравнению с методом тега + делегата.

person GurPreet_Singh    schedule 26.01.2014

Он прав, но вам нужно добавить это:

-(void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView.tag == TAG_DEV && buttonIndex == 1) { // handle the altdev
      ...
    } else if (alertView.tag == TAG_DONATE && buttonIndex == 1){ // handle the donate

    }
}

если buttonIndex==1, то вы используете ПЕРВУЮ другую кнопку. 0 будет для отмены. Но просто ничего не делать для 0

person Jeff Stone    schedule 14.11.2012

Или вы можете сделать это (проверьте название заголовка), это просто еще один вариант... Однако обратите внимание на предупреждения с одинаковыми названиями!

-(IBAction)altdev {
UIAlertView *alert = [[UIAlertView alloc] 

                      initWithTitle:@"titleOneGoesHere"
                      message:@"messageGoesHere"
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"Continue", nil];
[alert show];
}

-(IBAction)donate {
UIAlertView *alert = [[UIAlertView alloc] 

                      initWithTitle:@"titleTwoGoesHere"
                      message:@"messageGoesHere"
                      delegate:self
                      cancelButtonTitle:@"Cancel"
                      otherButtonTitles:@"Continue", nil];
[alert show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {

if (buttonIndex == 1)
{
    if([[alertView title] isEqualToString:@"titleOneGoesHere"])
    {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.examplesite1.com"]];
    }
    else
    {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"examplesite2.com"]];
    }
}
person Recycled Steel    schedule 03.07.2013