Detecting button click with UIAlertView
Solution 1
To detect the button clicks the alert view must have an associated delegate, e.g.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:self // <------
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
Solution 2
This is your code which i used and added some my code also. **
-(IBAction) Add
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"add button pressed"
message:@"Add to record"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"OK", nil];
alert.tag=101;//add tag to alert
[alert show];
[alert release];
}
Now when you press button on alert it will call clickedButtonAtIndex but there should a identifier for every alert. So add tag and then
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex**
{
// the user clicked one of the OK/Cancel buttons
if(alertView.tag == 101) // check alert by tag
{
if (buttonIndex == 0)
{
//just to show its working, i call another alert view
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
message:@"no error"
delegate:nil
cancelButtonTitle:@"IWORKS"
otherButtonTitles:@"NO PRB", nil];
[alert show];
[alert release];
}
else
{
NSLog(@"cancel");
}
}
}
Hope it helps.
Solution 3
The buttonIndex of 0 is the cancel button. I would recommend using:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
{
NSLog(@"cancel");
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK works" message:@"no error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
Solution 4
I feel if you wish to show a new alert view on button click event of an existing alert view, it would be better to use
- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
}
delegate method instead of
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
}
Solution 5
If you prefer your code to be cleaner and no dependency on delegate, you should try the blocks implementation of UIAlertView:
https://github.com/steipete/PSAlertView
Blocks are only supported on iOS 4+ devices though.
Related videos on Youtube
Stefan
Updated on July 09, 2022Comments
-
Stefan almost 2 years
I am trying to call and alert when a button is pressed. i use this :
-(IBAction)Add { UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"add button pressed" message:@"Add to record" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil ]; [alert show]; [alert release]; }
ok , no problem here, two button came up, OK and cancel. Now i want detect which button is pressed i use:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // the user clicked one of the OK/Cancel buttons if (buttonIndex == 0) { //just to show its working, i call another alert view UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well" message:@"no error" delegate:nil cancelButtonTitle:@"IWORKS" otherButtonTitles:@"NO PRB", nil]; [alert show]; [alert release]; } else { NSLog(@"cancel"); } }
now here is the problem. i cannnot detect which button is pressed; the 2nd alertview doesnt show. i've check through the code a couple of times, there doesn't seem to be any problem with it. no error/warning too.
-
vakio almost 14 yearsShowing an alert directly after another alert is probably not a good idea -- just a tip.
-
-
Sam Dolan almost 14 years+1: What I was halfway through writing. I'd also mention that the view controller needs to implement the
UIAlertViewDelegate
(though I believe it gives a warning if it doesn't.) -
mojuba over 10 yearsOr better,
if (buttonIndex == alertView.cancelButtonIndex) ...