Teclado de pantalla sin animación

UIKeyboardAnimationDurationUserInfoKey en UIKeyboardAnimationDurationUserInfoKey pero simplemente no puedo encontrar en ningún lugar cómo configurarlo en un valor personalizado.

UIKeyboardAnimationDurationUserInfoKey es un identificador de cadena const para la clave del diccionario que contiene la duración de la animación, por lo que no hay forma de cambiarla fácilmente.

Una forma de hacer que el teclado aparezca sin animación es observar las notificaciones del teclado y deshabilitar la animación cuando está por aparecer y luego volver a habilitarlas. Esto, por supuesto, desactiva cualquier otra animación también.

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowKeyboard:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; - (void)willShowKeyboard:(NSNotification *)notification { [UIView setAnimationsEnabled:NO]; } - (void)didShowKeyboard:(NSNotification *)notification { [UIView setAnimationsEnabled:YES]; } 

y luego, lo mismo para las UIKeyboardWillHideNotification/UIKeyboardDidHideNotification de UIKeyboardWillHideNotification/UIKeyboardDidHideNotification .

Compatible con iOS8:

Agregue el método de delegado apropiado:

 - (void)textFieldDidBeginEditing:(UITextField *)textField { [UIView setAnimationsEnabled:NO]; } 

o

 - (void)textViewDidBeginEditing:(UITextView *)textView { [UIView setAnimationsEnabled:NO]; } 

Agregue la notificación del teclado:

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didShowKeyboard:) name:UIKeyboardDidShowNotification object:nil]; 

Y método:

 - (void)didShowKeyboard:(NSNotification *)notification { [UIView setAnimationsEnabled:YES]; } 

Tratar

 [UIView performWithoutAnimation:^{ [textField becomeFirstResponder]; }]; 

He encontrado que la mejor solución es usar UIView.setAnimationsEnabled(_ enabled: Bool) .

Swift 3

 UIView.setAnimationsEnabled(false) textField.becomeFirstResponder() // or textField.resignFirstResponder() if you want to dismiss the keyboard UIView.setAnimationsEnabled(true) 

La respuesta de @Vadoff funciona perfecto. Aquí para Swift 3:

  override func viewDidLoad() { super.viewDidLoad() //... // Add observer to notificationCenter so that the method didShowKeyboard(_:) is called when the keyboard did show. NotificationCenter.default.addObserver(self, selector: #selector(type(of: self).didShowKeyboard(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil) // Make textField the first responder. textField.becomeFirstResponder() // < - Change textField to the name of your textField. } func textFieldDidBeginEditing(_ textField: UITextField) { // Disable animations. UIView.setAnimationsEnabled(false) } func didShowKeyboard(_ notification: Notification) { // Enable animations. UIView.setAnimationsEnabled(true) } 

Tuve que desactivar Animaciones en textViewShouldBeginEditing , textFieldDidBeginEditing no funcionó para mí (iOS 8)

Es bastante simple chicos. No use UIView: SetAnimationEnabled, ya que puede ser potencialmente problemático. Así es como elimino la animación cuando se muestra el teclado.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [txtFirstName becomeFirstResponder]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [txtFirstName resignFirstResponder]; }