UIAlertview没有调用正确的功能

时间:2013-11-15 18:46:49

标签: ios objective-c uialertview

我有这个UIAlertview标签,我试图用来调用一个函数。 fogotpassword警报视图显示,然后显示重置警报视图,但是当我尝试调用NSLog时(@“密码”);按下复位警报视图中的第一个按钮,它不会被调用。相反,重置警报视图按钮会再次弹出。我将不胜感激任何帮助。

-(void)viewDidLoad{
    forgotPassword = [[UIAlertView alloc] initWithTitle:@"Login Error"
                                                             message:@"Your login credentials do not match"
                                                            delegate:self
                                                   cancelButtonTitle:@"Try Again"
                                                   otherButtonTitles: @"Forgot Password",nil];
    [forgotPassword show];
}

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

    forgotPassword.tag = 1;
    resetPassword.tag = 2;

    if (buttonIndex == 1 && forgotPassword.tag ==1)
    {

        resetPassword = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
                                                            message:@"Email"                                                                                                            delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Reset Password", nil];
        [resetPassword setAlertViewStyle:UIAlertViewStylePlainTextInput];

        [resetPassword show];

        NSLog(@"RESET");

    }
    if (buttonIndex == 1 && resetPassword.tag == 2) {
       NSLog(@"Password");
    }
}

5 个答案:

答案 0 :(得分:3)

你的逻辑全都搞砸了。您设置两个标记,以便两者始终为true。由于您似乎拥有两个不同警报视图的ivars,因此请删除标记并执行以下操作:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (alertView == forgotPassword) {
        if (buttonIndex == alertView.firstOtherButtonIndex) {
            // show other alert
        }
    else if (alertView == resetPassword) {
        if (buttonIndex == alertView.firstOtherButtonIndex) {
            // reset
        }
    }
}

答案 1 :(得分:1)

无需使用标记

尝试这种方式

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if(alertView==forgotPassword)
    NSLog(@"forgotPassword alert");
}

答案 2 :(得分:0)

你的代码很混乱。您可以创建一个警报视图“forgotPassword”并显示它,而无需设置它的标记。然后,在alertView:clickedButtonAtIndex:方法中,您在两个警报视图上显式设置标记,然后询问这些警报视图以查看其标记是什么。这些标签永远不会改变。

相反,您应该在显示每个警报视图之前设置标记,然后检查传递给alertView:clickedButtonAtIndex:方法的UIAlertView标记。像这样:

-(void)viewDidLoad{
  forgotPassword = [[UIAlertView alloc] initWithTitle:@"Login Error"
                                                             message:@"Your login credentials do not match"
                                                            delegate:self
                                                   cancelButtonTitle:@"Try Again"
                                                   otherButtonTitles: @"Forgot Password",nil];
    forgotPassword.tag = 1;
    [forgotPassword show];
 }

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

if (buttonIndex == 1 && alertView.tag ==1)
{

    resetPassword = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
                                                            message:@"Email"                                                                                                            delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Reset Password", nil];
    [resetPassword setAlertViewStyle:UIAlertViewStylePlainTextInput];
    resetPassword.tag = 2;
    [resetPassword show];

    NSLog(@"RESET");

}
if (buttonIndex == 1 && alertView.tag == 2) {
   NSLog(@"Password");
}

}

答案 3 :(得分:0)

您应该在方法中使用alertView.tag == 1和alertView.tag == 2。正如你现在所做的那样,只要buttonIndex == 1,if语句总是为true,因为你明确设置了forgetPassword.tag = 1和resetPassword.tag = 2,然后检查每个项目。

此外,您应该在viewDidLoad中设置标记,除非您有理由在每次按下alertView按钮时继续重置其值。

或者,Anand K说的更容易。

-Stephen

答案 4 :(得分:0)

你的代码是多余的,无论如何都没有意义.. 在这种情况下,您不需要将UIAlertView用作属性。 使用此:

-(void)viewDidLoad{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Login Error"
                                                         message:@"Your login credentials     do not match"
                                                        delegate:self
                                               cancelButtonTitle:@"Try Again"
                                               otherButtonTitles: @"Forgot Password",nil];
    alertView.tag = 1;
    [alertView show];
}

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

    if (buttonIndex == 1) {
        if(alertView.tag == 1)
        {

            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: @"Forgot Password"
                                                            message:@"Email"                                                                                                            delegate:self
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:@"Reset Password", nil];
            [alertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
            alertView.tag = 2;

            [alertView show];

            NSLog(@"RESET");

        }
    } else if (alertView.tag == 2) {
       NSLog(@"Password");
    }
}

这段代码很干净使用它;)