-1

UIAlertViewStyleSecureTextInputに値を入力しているときにキーボードのリターン キーをタップすると、iOS 8 でUIAlertView呼び出しがトリガーされます。alertView:clickedButtonAtIndex: UIAlertViewDelegate

iOS 7UIAlertViewDelegate では、同じ条件で同じ呼び出しがトリガーされませんでした。

これが の問題かどうかはわかりませんiOS 8 or iOS 7。しかし、私のコードは iOS 8 の期待どおりに機能しなくなりました。

コードサンプル:

    #include "MPAMyViewController.h"

    static NSString *MPAPasswordConfirmationAlertTitle = @"Please confirm your password.";
    static NSString *MPAPasswordConfirmationAlertCancelButtonTitle = @"Cancel";
    static NSString *MPAPasswordConfirmationAlertOkButtonTitle = @"OK";
    static NSString *MPAPasswordConfirmationTextFieldPlaceholder = @"Enter Password";

    @interface MPAMyViewController () <UIAlertViewDelegate, UITextFieldDelegate>

    @property (strong, nonatomic) NSString *errorFromRequest;
    @property (strong, nonatomic) UIAlertView *passwordAlertView;

    - (void)processRequest:(UITextField *)passwordTextField;

    @end

    @implementation MPAMyViewController

    - (IBAction)showPasswordConfirmationAlert:(id)sender {
        self.passwordAlertView = [[UIAlertView alloc] initWithTitle:MPAPasswordConfirmationAlertTitle
                                                            message:self.errorFromRequest
                                                           delegate:self
                                                  cancelButtonTitle:MPAPasswordConfirmationAlertCancelButtonTitle
                                                  otherButtonTitles:MPAPasswordConfirmationAlertOkButtonTitle, nil];

        self.passwordAlertView.alertViewStyle = UIAlertViewStyleSecureTextInput;

        UITextField *passwordTextField = [self.passwordAlertView textFieldAtIndex:0];
        [passwordTextField becomeFirstResponder];
        passwordTextField.placeholder = MPAPasswordConfirmationTextFieldPlaceholder;
        passwordTextField.delegate = self;

        [self.passwordAlertView show];
    }


    #pragma mark - UIAlertViewDelegate

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        NSString *title = [alertView buttonTitleAtIndex:buttonIndex];

        if([title isEqualToString:MPAPasswordConfirmationAlertOkButtonTitle]) {
            UITextField *passwordTextField = [alertView textFieldAtIndex:0];
            [self processRequest:passwordTextField];
        }
    }


    #pragma mark - TextField Delegate

    - (BOOL)textFieldShouldReturn:(UITextField *)textField {
        [self.passwordAlertView dismissWithClickedButtonIndex:self.passwordAlertView.firstOtherButtonIndex animated:YES];

        return YES;
    }

    - (void)processRequest:(UITextField *)passwordTextField {
        NSString *password = passwordTextField.text;

        // CODE: send request
    }

    @end
4

4 に答える 4

0

alertView を使用して、委任を使用し、 UIAlertView の Delegate メソッドのいずれかを使用します。デリゲートを現在のビュー コントローラーに設定していないので、以下のコードを試してください。

使用

 UIAlertView * alertView  = UIAlertView()
  viewDidLoad(){

 alertView.delegate = self
}

上記のコードを使用すると、デリゲート メソッドが呼び出されます。

于 2015-03-03T11:48:52.817 に答える
0

以下のコード スニペットを試してください。

#pragma mark - TextField Delegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField {  
    return NO;
}

注: 上記のデリゲートを他のテキスト フィールドに使用している場合は、要件に従って条件付きコードを記述します。

于 2015-08-02T12:41:41.470 に答える
0

UIAlertView Delegatemethod が呼び出されないという同様の問題がありました。UIAlertView が iOS 8 で非推奨になっていることがわかりました。UIAlertController を使用する必要があります。

于 2015-03-03T11:08:11.117 に答える