vuelve volver utilidad teclados teclado tamaƱo para gestos descargar como cambiar aumentar atras iphone animation keyboard animated

volver - teclados para iphone 6



iPhone: haga que el teclado se deslice para verlo desde la derecha, como cuando se edita una nota en Contactos (5)

Para iOS 7, he encontrado que la siguiente solución funciona mejor para mí:

UIResponder-KeyboardCache a su proyecto.

[UIResponder cacheKeyboard:YES]; al viewDidLoad de la vista antes de la vista del teclado. Puede ser mejor hacer esto inmediatamente cuando se carga la aplicación o durante un tiempo conveniente cuando se lo puede permitir (durante una solicitud HTTP, por ejemplo). En la mayoría de los casos, simplemente en la vista anterior es suficiente.

-Agregue lo siguiente a viewDidLoad de la vista de teclado.

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

Para explicarlo, esto precargará la vista del teclado, lo que eliminará el retraso de la primera llamada de la vista del teclado. Al llamar a becomeFirstResponder en el campo de texto en la cola principal, se desliza hacia adentro con la vista en lugar de animar hacia arriba antes de que la vista se deslice.

Estoy buscando una manera de deslizar el teclado en la vista desde la derecha, como lo que sucede en la aplicación Contactos cuando editas una nota.

Mi problema es que cuando llamo [someTextView BecomeFirstResponder] en viewWillAppear, el teclado aparece inmediatamente sin animación. Y cuando lo llamo en viewDidAppear, la vista primero se desliza desde la derecha (UINavigationController se desliza), y luego el teclado se desliza desde la parte inferior.

¿Es posible que el teclado se deslice desde la derecha, junto con la vista?


Solución

En iOS 7, funciona la función becomeFirstResponder en _textView en viewDidLayoutSubviews .

- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [_textView becomeFirstResponder]; }

Nota: hacerlo en viewWillLayoutSubviews también funciona.

Explicación

Lea la discusión en los documentos para becomeFirstResponder .

Puede llamar a este método para hacer que un objeto respondedor, como una vista, sea el primer respondedor. Sin embargo, solo debe llamarlo en esa vista si es parte de una jerarquía de vistas. Si la propiedad de window la vista contiene un objeto UIWindow , se ha instalado en una jerarquía de vistas; si devuelve nil , la vista se separa de cualquier jerarquía.

Cuando se usa un controlador de navegación para empujar su controlador de vista personalizado en pantalla, self.view.window sigue siendo nil en el momento en que se viewDidLoad o viewWillAppear: . Entonces, _textView.window también es nil en los mismos métodos, ya que _textView es una subvista de self.view , es decir, ambos están en la misma ventana. No importa cómo presente su controlador de vista personalizado, self.view.window (y, por lo tanto, _textView.window ) también es nil en initWithNibName:bundle: self.view.window se establece con el tiempo viewDidAppear: se llama, pero eso es demasiado tarde porque en ese momento, el controlador de navegación ya ha completado la animación de empujar la vista en pantalla.

self.view.window también se establece en el momento en que se llama viewWillLayoutSubviews o viewDidLayoutSubviews se llama a estos métodos antes de que comience la animación push del controlador de navegación. Entonces, es por eso que funciona cuando lo haces en cualquiera de esos métodos.

Desafortunadamente, las viewWillLayoutSubviews viewDidLayoutSubviews viewWillLayoutSubviews y viewDidLayoutSubviews viewWillLayoutSubviews viewDidLayoutSubviews se llaman mucho más que solo en el impulso inicial del controlador de navegación. Pero, navigationController:willShowViewController: y willMoveToParentViewController: recibir llamadas demasiado pronto (después de viewDidLoad pero antes de que se configure self.view.window ) y navigationController:didShowViewController: y didMoveToParentViewController: ser llamado demasiado tarde (después de la animación).

La única otra manera en la que puedo pensar en hacerlo es observar de alguna manera la propiedad de la window de _textView para que se le notifique cuando cambie, pero no estoy seguro de cómo hacerlo ya que la window es de readonly .


En iOS 7 (o en cualquier versión anterior) puede hacer una cosa simple en loadView , viewDidLoad o viewWillAppear

[yourTextView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];

En este caso, obtendrá una apariencia de izquierda a derecha del teclado alineado con el movimiento de empujar el controlador de vista.


Puede intentar enviar el mensaje BecomeFirstResponder al nuevo controlador de vista antes de insertarlo en la pila. Por ejemplo:

-(void)functionWhereYouPushTheNewViewController { yourNewViewController *newVC = [[yourNewViewController alloc] init]; [newVC.yourTextView becomeFirstResponder]; [self.navigationController pushViewController:newVC animated:YES]; }

Sin embargo, descubrí que cambiar las animaciones en cosas como el teclado es bastante difícil, y si lees las Pautas de Interfaz Humana, Apple deja bastante claro que quieren que ciertas cosas actúen de cierta manera, todo el tiempo. Hay formas de cambiar el comportamiento de ciertas animaciones, pero a menudo involucran llamadas de API no documentadas y son motivo de rechazo de la tienda de aplicaciones. Sería una violación de HIG el hecho de haber empujado las vistas hacia arriba desde la parte inferior, por ejemplo.

Espero que esto ayude.


Todo lo que necesita hacer es indicar a la vista de texto en cuestión que se convierta en el primer respondedor en el método viewDidLoad del controlador de vista que está presionando en la pila de navegación:

override func viewDidLoad() { super.viewDidLoad() someTextView.becomeFirstResponder() }

Esto funciona en iOS 8. El teclado se desliza desde la derecha junto con la vista.