2015-03-03 1 views
0

Во время разговоров по поводу возвращения ключа клавиатуры при вводе значения в UIAlertViewStyleSecureTextInput в виде UIAlertView является запуском вызова alertView:clickedButtonAtIndex:UIAlertViewDelegate в прошивке 8Проблемы с отводом через клавишу возврата клавиатуры для полевой прошивки UIAlertViewStyleSecureTextInput UIAlertView в 8

В прошивке 7 же UIAlertViewDelegate WASN вызовов не срабатывает в тех же условиях.

Я не уверен, что это проблема в 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 

ответ

0

У меня была аналогичная проблема с UIAlertView Delegatemethod не вызывался. Я узнал, что UIAlertView устарел в iOS 8. Вы должны использовать UIAlertController.

0

Используйте UIAlertController, чтобы сделать его compatible with iOS 8.

+0

Спасибо за быстрый ответ. UIAlertController не имеет никакого значения. Указанный делегат alertView: clickedButtonAtIndex по-прежнему вызывает вызов. Даже я должен сделать это условным, потому что UIAlertController не будет работать для iOS 7. – satish

0

Использование alertView используйте делегирование и использовать любой из метода Делегат UIAlertView .. Вы не установили делегат вам текущий контроллер представления так попробуйте этот код

использовать

UIAlertView * alertView = UIAlertView() 
    viewDidLoad(){ 

alertView.delegate = self 
} 

Используя приведенный выше код, вы будете делегировать методы.

+0

Я могу вызвать методы делегата. Вызов метода делегата не является проблемой. То, что вы упомянули, уже сделано в моем общем коде. «alertView: clickedButtonAtIndex:' получает вызов в iOS 8 при нажатии клавиши возврата с клавиатуры при вводе значения в поле ввода в окне «Предупреждение». – satish

0

Попробуйте ниже фрагмент кода.

#pragma mark - TextField Delegate 

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

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

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