iphone - teclados - Descartar el teclado con el gesto de deslizar(como en la aplicación de mensajes)
teclados para iphone 6 (8)
Afortunadamente, Apple agregó la práctica propiedad keyboardDismissMode
en UIScrollView
para hacer su vida un poco más fácil.
Ahora su aplicación puede comportarse como Messages.app simplemente cambiando una sola propiedad en su Storyboard, o alternativamente agregando una línea de código.
Esta propiedad utiliza la nueva enumeración UIScrollViewKeyboardDismissMode
. Los valores posibles de esta enumeración son los siguientes:
UIScrollViewKeyboardDismissModeNone // the keyboard is not dismissed automatically when scrolling
UIScrollViewKeyboardDismissModeOnDrag // dismisses the keyboard when a drag begins
UIScrollViewKeyboardDismissModeInteractive // the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
Aquí está la propiedad Storyboard para cambiar para descartar el teclado en desplazamiento:
Espero que ayude a resolver tu problema
Cuando el teclado se muestra en la aplicación de mensajes del iPhone, si el usuario comienza a deslizar hacia abajo desde la vista de tabla de mensajes y continúa en el área del teclado, el teclado comenzará a cerrarse. Si mueven su dedo hacia arriba y hacia abajo durante este proceso, el teclado se mueve con él.
¿Apple está haciendo esto con API privadas, o hay una forma de controlar el teclado como este desde (supongo) un reconocedor de gestos?
Creé una categoría UIView que proporciona la funcionalidad deseada:
https://github.com/danielamitay/DAKeyboardControl
Editar: De hecho, se ha utilizado en la tienda de aplicaciones.
Creo que la mejor manera es colocar un botón oculto sobre el contenedor de entrada de texto. una tira larga y cuando detecta un touchdown y suelta o cancela, oculta el teclado.
Voy a intentarlo y te dejaré saber cómo voy.
En iOS 7, ahora puede descartar el teclado interactivamente en un UIScrollView.
Descartar el teclado en UIScrollView
Espero que ayude a alguien.
La solución más simple es establecer las siguientes dos propiedades:
-
UIViewController : UIResponder
inputAccessoryView
-
UITableView : UIScrollView
keyboardDismissMode
Boom, bebé!
Echa un vistazo a Acani Chats iPhone Client ChatViewController.swift
para ver un ejemplo.
Puede usar UISwipeGestureRecognizer para hacerlo. No sé cómo implementarlo usando código, pero si está utilizando el nuevo xcode 4.2 beta, entonces hay un método fácil:
- Crea un IBAction:
- (IBAction)dismiss:(id)sender;
Vaya a su vista en su xib y configure la clase para que vea UIControl.
Arrastre y conecte el UISwipeGestureRecognizer de la Biblioteca a su vista.
Conecte el IBAction (TouchDown) con el UISwipeGestureRecognizer.
Escribe el código para descartar el teclado:
- (IBAction)dismiss:(id)sender { [yourTextField resignFirstResponder]; }
¡Hecho!
Respuesta corta; Lo más probable es que estén haciendo algo de "API privada" allí.
Estoy seguro de que el teclado está en una vista independiente, encima de la ventana de la aplicación (no tiene acceso / control y siempre se muestra en la parte superior, no importa qué). Lo máximo que puede hacer es hacer que la vista de entrada se convierta en / renuncie al estado de la primera persona que responde, y el teclado aparecerá / desaparecerá en consecuencia: todo o nada.
Puede obtener un control de la vista del teclado y cambiar su propiedad de marco (usando propiedades no documentadas de clases documentadas y clases no documentadas), pero estoy bastante seguro de que lo echarán de la tienda.
Rápidamente puede usar el código siguiente para obtener el contenedor de vista del teclado actual ( si existe ), de lo que puede cambiar el marco de su código:
UIApplication.shared.windows
.filter{ NSStringFromClass($0.classForCoder) == "UIRemoteKeyboardWindow" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetContainerView" }
.first?.subviews.filter { NSStringFromClass($0.classForCoder) == "UIInputSetHostView" }
.first
Por cierto aquí hay una herramienta llamada Reveal que te permite ver la vista jerárquica.