0

パスワードが正しい場合にセグエをトリガーする前に、パスワードを使用して実装したいボタンがあります。間違ったパスワードを入力した瞬間まではすべて正常に見えます。ユーザーにパスワードが間違っていることを通知する別のalertViewを実装しました。アラートビューが飛び出し、しばらくしてから消えると、アラートビューは再び表示されたり消えたりし続け、画面上で他に何もできなくなります。 再表示を停止するにはどうすればよいですか?以下は、これを処理するコードの私の部分です。

- (IBAction)editLeagues:(id)sender {

    [self presentAlertViewForPassword];

}

-(void)presentAlertViewForPassword
{

    _passwordAlert = [[UIAlertView alloc]initWithTitle:@"Password"
                                                           message:@"Enter Password to edit Leagues"
                                                          delegate:self
                                                 cancelButtonTitle:@"Cancel"
                                                 otherButtonTitles:@"OK", nil];
    [_passwordAlert setAlertViewStyle:UIAlertViewStyleSecureTextInput];
    _passwordField = [_passwordAlert textFieldAtIndex:0];
    _passwordField.delegate = self;
    _passwordField.autocapitalizationType = UITextAutocapitalizationTypeWords;
    _passwordField.tag = textFieldPassword;
    [_passwordAlert show];

}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    NSString *password = [NSString stringWithFormat:@"55555"];

      if ( ![_passwordField.text isEqual:password]) {

          _wrongPassword = [[UIAlertView alloc] initWithTitle:@"Wrong Password"
                                                                message:@"You are not authorised to use this feature!"
                                                               delegate:self
                                                      cancelButtonTitle:nil
                                                      otherButtonTitles:nil];
        [_wrongPassword show];

        [self performSelector:@selector(allertViewDelayedDissmiss:) withObject:nil afterDelay:2];
    }
    else
    {
         [self performSegueWithIdentifier:@"addLeague" sender:[alertView buttonTitleAtIndex:0]];
    }

}

-(void) allertViewDelayedDissmiss:(UIAlertView *)alertView
{
    [_wrongPassword dismissWithClickedButtonIndex:-1 animated:YES];

}


- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
    NSString *inputText = [[alertView textFieldAtIndex:0] text];
    if( [inputText length] >= 4 )
    {
        return YES;
    }
    else
    {
        return NO;
    }
}
4

2 に答える 2

1

[_wrongPassword dismissWithClickedButtonIndex:-1 animated:YES];デリゲートメソッドを呼び出しますalertView:didDismissWithButtonIndex:

2つのオプションがあります。

  1. 間違ったパスワードアラートにデリゲートを設定しないでください

  2. alertView:didDismissWithButtonIndex:たとえば、正しいアラートを確認してください

    - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
    {
        if (alert == _passwordAlert) {
            NSString *password = [NSString stringWithFormat:@"55555"];
            // and so on
        }
    }
    
于 2012-12-19T18:33:24.947 に答える
0

間違ったパスワードアラートを閉じると、didDismissWithButtonIndexデリゲートメソッドも呼び出されるため、問題が発生しています。

解決策1

delegate間違ったパスワードアラートのをに設定しますnil

wrongPassword = [[UIAlertView alloc] initWithTitle:@"Wrong Password"
                                                                message:@"You are not authorised to use this feature!"
                                                               delegate:nil
                                                      cancelButtonTitle:nil
                                                      otherButtonTitles:nil];

解決策2

alertViewにタグを追加します。そして、次のようにメソッドを変更します。

-(void)presentAlertViewForPassword
 {
       _passwordAlert = [[UIAlertView alloc]initWithTitle:@"Password"
                                                       message:@"Enter Password to edit Leagues"
                                                      delegate:self
                                             cancelButtonTitle:@"Cancel"
                                             otherButtonTitles:@"OK", nil];
       [_passwordAlert setAlertViewStyle:UIAlertViewStyleSecureTextInput];
       passwordAlert.tag = 7;
       _passwordField = [_passwordAlert textFieldAtIndex:0];
       _passwordField.delegate = self;
       _passwordField.autocapitalizationType = UITextAutocapitalizationTypeWords;
       _passwordField.tag = textFieldPassword;
       [_passwordAlert show];
}


- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
    if(alertView.tag == 7)
    {
       NSString *password = [NSString stringWithFormat:@"55555"];
       if ( ![_passwordField.text isEqual:password])
       {
          _wrongPassword = [[UIAlertView alloc] initWithTitle:@"Wrong Password"
                                                                message:@"You are not authorised to use this feature!"
                                                               delegate:self
                                                      cancelButtonTitle:nil
                                                      otherButtonTitles:nil];
        [_wrongPassword show];

        [self performSelector:@selector(allertViewDelayedDissmiss:) withObject:nil afterDelay:2];
      }
      else
      {
         [self performSegueWithIdentifier:@"addLeague" sender:[alertView buttonTitleAtIndex:0]];
      }
   }
}
于 2012-12-19T18:34:13.893 に答える