objective-c ios cocoa-touch keyboard uitextfield

objective-c - uitextfielddelegate



Retraso/retraso super lento en la animaciĆ³n inicial del teclado de UITextField (11)

Antes de implementar cualquier hack exótico para evitar este problema, intente esto: detenga la sesión de depuración, cierre la aplicación de la multitarea, desenchufe su dispositivo de la computadora y ejecute la aplicación normalmente tocando su ícono. He visto al menos dos casos en los que la demora solo se produce cuando el dispositivo está enchufado.

Bien, este problema me ha estado volviendo loco.

Toma aproximadamente 3-4 segundos para que aparezca el teclado después de tocar mi UITextField . Esto solo ocurre la primera vez que aparece el teclado desde que se lanzó la aplicación, luego la animación comienza instantáneamente.

Al principio pensé que era un problema cargar demasiadas imágenes, o mi UITableView , pero acabo de crear un nuevo proyecto con solo un UITextField , y todavía experimento este problema. Estoy usando iOS 5, Xcode ver 4.2 y ejecutándome en un iPhone 4S.

Este es mi código:

#import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)]; textField.borderStyle = UITextBorderStyleRoundedRect; textField.delegate = self; [self.view addSubview:textField]; } @end

¿Es este un problema común para todas las aplicaciones?

En este momento, la única forma en que puedo mejorarlo es haciendo que textField convierta / textField primer respondedor en viewDidAppear , pero eso no resuelve el problema por completo, solo carga el retraso cuando se carga la vista. Si hago clic en textField inmediatamente cuando se carga la vista, sigo teniendo el problema; si espero 3-4 segundos después de que la vista se cargue antes de tocar el campo de texto, no recibo el retraso.


Codifique en el bloque agregado a la cola principal y ejecútelo de forma asíncrona. (no bloquee el hilo principal)

dispatch_async(dispatch_get_main_queue(), ^(void){ [textField becomeFirstResponder]; });


Esta respuesta seleccionada causa un bloqueo BAD_EXC en iOS 11 - eliminar de la aplicación para corregir


Este error parece estar solucionado en iOS 9.2.1. Desde la actualización de mi dispositivo, ya no tengo un retraso entre tocar un campo de texto y el teclado que aparece cuando mi dispositivo está conectado a mi computadora.



Por lo tanto, el problema no se limita a la primera instalación, como había pensado anteriormente, sino que ocurre cada vez que se lanza la aplicación. Aquí está mi solución que resuelve el problema por completo.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Preloads keyboard so there''s no lag on initial keyboard appearance. UITextField *lagFreeField = [[UITextField alloc] init]; [self.window addSubview:lagFreeField]; [lagFreeField becomeFirstResponder]; [lagFreeField resignFirstResponder]; [lagFreeField removeFromSuperview]; }


Puede agregar el código siguiente cuando se cargó la vista de ViewController, como viewDidAppear.No solo la aplicación: didFinishLaunchingWithOptions:

UITextField *lagFreeField = [[UITextField alloc] init]; [self.window addSubview:lagFreeField]; [lagFreeField becomeFirstResponder]; [lagFreeField resignFirstResponder]; [lagFreeField removeFromSuperview];


Puede usar la solución de Vadoff en Swift agregando esto a didFinishLaunchingWithOptions:

// Preloads keyboard so there''s no lag on initial keyboard appearance. let lagFreeField: UITextField = UITextField() self.window?.addSubview(lagFreeField) lagFreeField.becomeFirstResponder() lagFreeField.resignFirstResponder() lagFreeField.removeFromSuperview()

Me funciona en iOS 8.


Sí, también tengo unos segundos de retraso en los últimos iPhone 4s. No entres en pánico Por alguna razón, solo ocurre la primera vez que la aplicación se carga desde Xcode en Debug. Cuando lo solté, no recibí el retraso. Solo olvídalo ...


Un problema relacionado, donde un UIViewController tardaría en presentarse, se resolvió utilizando la fuente del sistema en lugar de una fuente personalizada en el UITextField. Tal vez usar la fuente del sistema también podría funcionar para este problema?