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: