tecla sacar poner pantalla inicio home flotante desactivar como boton iphone keyboard uikit ios5

iphone - sacar - Teclado de retroceso de iMessage Style en una aplicación de iOS



poner boton de inicio en ipad (3)

Me he estado preguntando si es posible replicar el comportamiento del teclado iOS5 de Apple en la aplicación de mensajes, sin usar ninguna llamada API privada. Cuando se desplaza hacia abajo más allá del teclado en la aplicación de mensajes, el teclado colapsará dejando más espacio para ver los mensajes, pruébelo para ver.

No pude encontrar nada que apuntara a hacer esto sin tener que empezar a saltar algunos aros graves para obtener una instancia de la Vista del teclado. Y estoy bastante seguro de que Apple no estaría feliz con eso.

Además de la respuesta que se proporciona a continuación, puede ver un proyecto de Xcode totalmente copiado de mi implementación aquí: https://github.com/orta/iMessage-Style-Receding-Keyboard


En iOS 7 hay una propiedad keyboardDismissMode en UIScrollView. Así que simplemente configúrelo en "UIScrollViewKeyboardDismissModeInteractive" y obtendrá este comportamiento. Funciona en subclases UIScrollView como UITableView.

self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

Swift 3:

tableView.keyboardDismissMode = .interactive

O cámbielo en el guión gráfico (si lo usa) en el inspector de atributos para su subclase UIScrollView.


Esta es una solución incompleta, sin embargo, debería darle un buen punto de partida.

Agregue los siguientes ivars a su UIViewController:

CGRect keyboardSuperFrame; // frame of keyboard when initially displayed UIView * keyboardSuperView; // reference to keyboard view

Agregue un inputAccessoryView a su controlador de texto. Creé una vista pequeña para insertar como accesorio:

accView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; accView.backgroundColor = [UIColor clearColor]; textField.inputAccessoryView = accView;

-(void)loadView el código anterior a -(void)loadView

Regístrese para recibir UIKeyboardDidShowNotification y UIKeyboardDidHideNotification cuando se carga la vista:

- (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; return; }

Agregue métodos a los especificados como los selectores para las notificaciones:

// method is called whenever the keyboard is about to be displayed - (void)keyboardWillShow:(NSNotification *)notification { // makes keyboard view visible incase it was hidden keyboardSuperView.hidden = NO; return; } // method is called whenever the keyboard is displayed - (void) keyboardDidShow:(NSNotification *)note { // save reference to keyboard so we can easily determine // if it is currently displayed keyboardSuperView = textField.inputAccessoryView.superview; // save current frame of keyboard so we can reference the original position later keyboardSuperFrame = textField.inputAccessoryView.superview.frame; return; }

Agregue métodos para rastrear y tocar la vista del teclado:

// stops tracking touches to divider - (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { CGRect newFrame; CGRect bounds = [[UIScreen mainScreen] bounds]; newFrame = keyboardSuperFrame; newFrame.origin.y = bounds.size.height; if ((keyboardSuperView.superview)) if (keyboardSuperFrame.origin.y != keyboardSuperView.frame.origin.y) [UIView animateWithDuration:0.2 animations:^{keyboardSuperView.frame = newFrame;} completion:^(BOOL finished){ keyboardSuperView.hidden = YES; keyboardSuperView.frame = keyboardSuperFrame; [textField resignFirstResponder]; }]; return; } // updates divider view position based upon movement of touches - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch * touch; CGPoint point; CGFloat updateY; if ((touch = [touches anyObject])) { point = [touch locationInView:self.view]; if ((keyboardSuperView.superview)) { updateY = keyboardSuperView.frame.origin.y; if (point.y < keyboardSuperFrame.origin.y) return; if ((point.y > updateY) || (point.y < updateY)) updateY = point.y; if (keyboardSuperView.frame.origin.y != updateY) keyboardSuperView.frame = CGRectMake(keyboardSuperFrame.origin.x, point.y, keyboardSuperFrame.size.width, keyboardSuperFrame.size.height); }; }; return; }

Descargo de responsabilidad:

  • Al renunciar como primera respuesta, el teclado vuelve a su posición original antes de deslizarse fuera de la pantalla. Para que eliminar el teclado sea más fluido, primero debe crear una animación para mover el teclado fuera de la pantalla y luego ocultar la vista. Dejaré esta parte como un ejercicio para los lectores.
  • Solo he probado esto en el simulador iOS 5 y en un iPhone con iOS 5. No lo he probado con versiones anteriores de iOS.

El proyecto SlidingKeyboard que creé para probar este concepto está disponible en GitHub en el directorio de ejemplos de BindleKit:

https://github.com/bindle/BindleKit

Editar: Actualizando el ejemplo para abordar el primer descargo de responsabilidad.


La solución simple de Vladimir ocultará el teclado mientras el usuario se desplaza hacia abajo. Sin embargo, para finalizar la pregunta sobre iMessage, para mantener un cuadro de texto siempre visible y anclado en la parte superior del teclado, debe implementar estos métodos:

- (UIView *) inputAccessoryView { // Return your textfield, buttons, etc } - (BOOL) canBecomeFirstResponder { return YES; }

Aquí hay un buen tutorial dividiéndolo más