2013-11-15 2 views
0

У меня есть этот UIAlertview с тегами, которые я пытаюсь использовать для вызова функции. Появится сообщение с предупреждением о fogotpassword, после чего появится предупреждение о сбросе, но затем, когда я пытаюсь вызвать NSLog (@ «Пароль»); функцию, нажав первую кнопку в режиме сброса, она не вызывается. Вместо этого снова появляется кнопка предупреждения о сбросе. Буду признателен за любую помощь, которую я получаю.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 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"); 
    } 
} 

ответ

3

Ваша логика все перепутались. Вы устанавливаете оба тега, чтобы оба значения всегда были истинными. Поскольку у вас, похоже, есть ивары для двух разных видов предупреждений, избавитесь от тегов и сделайте это:

- (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 
     } 
    } 
} 
+0

Спасибо, дадут вам галочку, как только истечет время. Я просто следую другому ответу stackoverflow, и я думаю, что это был не лучший метод. – user2997441

+0

Имейте в виду, что использование тегов вместо ivars для представлений alert также отлично. Вам просто нужно установить тег при создании представления предупреждения, а не в методе делегата. – rmaddy

1

Нет необходимости использовать тег

Try таким образом

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

Ваш код сбит с толку. Вы создаете представление предупреждения «забытое слово» и показываете его, не устанавливая его. Затем в вашем alertView: clickedButtonAtIndex: метод, вы явно устанавливаете тег в обоих режимах просмотра, а THEN запрашиваете эти предупреждения, чтобы узнать, что их теги. Эти теги никогда не изменятся.

Вместо этого вы должны установить тег для каждого вида предупреждения перед его отображением, а затем проверить тег UIAlertView, который передается в метод alertView: clickedButtonAtIndex :. Что-то вроде этого:

-(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"); 
} 

}

0

Вы должны использовать alertView.tag == 1 и alertView.tag == 2 в своих методах. Поскольку у вас есть это прямо сейчас, оба оператора if всегда будут истинны, пока buttonIndex == 1, поскольку вы явно устанавливаете forgetPassword.tag = 1 и resetPassword.tag = 2, а затем проверяете каждый элемент.

Кроме того, вы должны установить теги в своем viewDidLoad, если у вас нет причин постоянно изменять значения своих значений каждый раз, когда нажата кнопка alertView.

Или более простой способ - это то, что сказал Ананд К.

-Stephen

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"); 
    } 
} 

Этот код является чистым использованием;)

+0

Почему вы дублировали ответ Дункана? – rmaddy

+0

Я не дублировал его ... мой код более чист. Я не использую UIAlertView как свойство ... кроме того, в ответе Дункуна есть 2 раза «buttonIndex == 1» .. мой код более эффективен. . У вас есть 48 тысяч точек. Может быть, вы можете легко увидеть важные отличия. –

Смежные вопросы