iOS Beginner: UIAlertView Window with 3 Buttons > Check what button was pressed

安稳与你 提交于 2020-02-03 04:51:05

问题


I have a working code from a tutorial but don't understand it completely.

Situation:

After a button was pressed in my iPhone App an AlertView appears with three buttons. Now I like to check what button the user pressed.

CODE FROM THE TUTORIAL:

- (IBAction)infoButtonPressed:(id)sender {

    UIAlertView *myAlert1 = [[UIAlertView alloc]initWithTitle:@"My Alert View 1" 
                                                   message:@"Here we go" 
                                                  delegate:self 
                                         cancelButtonTitle:@"Cancel" 
                                         otherButtonTitles:@"Option1", @"Option2", nil];

    [alert show];
}





- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex);
}

Code works, I see the correct output in the console as a NSLog but how is it possible that the method:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex);
}

refers to the correct alert view. In this case: myAlert1.

What about with more than one alert view. For example a second one calling myAlert2.

I know the following code is not correct but it would make more sense to me if I'd write the method as follow:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSLog(@"Button: %i, was pressed.", buttonIndex_FROM_myAlert1);
}

Hope you can help, drives me nuts.

Regards, Marc


回答1:


how is it possible that the method refers to the correct alert view?

For exactly that reason, the delegate method alertView:didDismissWithButtonIndex: actually tells you which alert view it refers to. Note that the method has two arguments. The second one tells you the button index and the first one points to the alert view this button index refers to.

If you have more than one alert view that share the same delegate, you will have to check against the first argument which alert view this is about. To be able to do that, you would have to store the alert views in an ivar/property or other data structure in order to remember them in the delegate method. (Or, since UIAlertView is a subclass of UIView, you could use the tag property to distinguish between multiple views).



来源:https://stackoverflow.com/questions/8688153/ios-beginner-uialertview-window-with-3-buttons-check-what-button-was-pressed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!