How to react to multiple UIAlertViews

- by

If your class creates more than one UIAlertView, then you need a way to react to each of those accordingly. Problem is, you may only have one delegate that listens to all alerts at any given time.

You could of course create a separate class for each alert view, but that’s a bit overkill. Instead, the UIView’s tag property comes in handy with which you can identify a view at runtime (and UIAlertView inherits from UIView).

tag is an integer so you can only give it whole numbers, like so:

- (void)alertOne {
    UIAlertView *infoMessage;
    infoMessage = [[UIAlertView alloc]
                   initWithTitle:@"Title 1" message:@"Message 1 goes here."
                   delegate:self cancelButtonTitle:@"Exciting stuff!" otherButtonTitles:@"Nice!", nil];
    infoMessage.alertViewStyle = UIAlertViewStyleDefault;
    infoMessage.tag = 1;
    [infoMessage show];
}

- (void)alertTwo {
    UIAlertView *infoMessage;
    infoMessage = [[UIAlertView alloc]
                   initWithTitle:@"Title 2" message:@"Message 2 goes here."
                   delegate:self cancelButtonTitle:@"Exciting stuff!" otherButtonTitles:@"Nice!", nil];
    infoMessage.alertViewStyle = UIAlertViewStyleDefault;
    infoMessage.tag = 2;
    [infoMessage show];
}

In your delegate method you can now ask which tag is set when those buttons are pressed:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    // reacting to tag 1
    if (alertView.tag == 1) {
        if (buttonIndex == 0) {
            NSLog(@"User pressed first button");
        } else if (buttonIndex == 1) {
            NSLog(@"User pressed second button");
        }
    }
    
    // reacting to tag 2
    if (alertView.tag == 2) {
        if (buttonIndex == 0) {
            NSLog(@"User pressed first button");
        } else if (buttonIndex == 1) {
            NSLog(@"User pressed second button");
        }
    }
}

See also:



If you enjoy my content, please consider supporting me on Ko-fi. In return you can browse this whole site witout any pesky ads! More details here.

Add your voice!

This site uses Akismet to reduce spam. Learn how your comment data is processed.