ios objective-c iphone xcode uitableview

ios - UITableView y UIView con keyboardWillShow



objective-c iphone (3)

Como se menciona en el comentario, conecte su restricción inferior (la de su vista que contiene el campo de texto y el botón) por @IBOutlet a su controlador de vista. Escuche UIKeyboardWillHideNotification y UIKeyboardWillShowNotification e implemente sus selectores. Cuando aparezca el teclado, ajuste la restricción inferior a la altura del teclado y cuando se oculte, vuelva a establecerlo en 0 (o cualquier valor que tenga allí). Envolvería el ajuste en una animación.

Me gusta (en Swift):

func keyboardWillShow(notification: NSNotification) { var info = notification.userInfo! var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue() self.view.layoutIfNeeded() UIView.animateWithDuration(0.25, animations: { () -> Void in self.bottomConstraint.constant = keyboardFrame.size.height self.view.layoutIfNeeded() }) } func keyboardWillHide(notification: NSNotification) { self.view.layoutIfNeeded() UIView.animateWithDuration(0.25, animations: { () -> Void in self.bottomConstraint.constant = 0 self.view.layoutIfNeeded() }) }

Tengo este UITableView que casi llena todo mi UIViewController, y tengo un UIView en la parte inferior que contiene un botón y un campo de texto.

Cuando hago clic en el campo de texto, quiero que la UIView y la vista de tabla se empujen hacia arriba, de modo que la UIView esté justo encima del teclado.

- UIView: - UITextField - UIButton

He probado varias sugerencias aquí, pero ninguna parece funcionar en mi situación.


Una palabra: restricciones.

Lea mi artículo aquí: Altura del teclado en pantalla de iOS

Básicamente tiene una restricción en la parte inferior de la pantalla, y cada vez que el usuario abre el teclado en pantalla, cambia la altura de esta constante.

Espero que esto ayude.


Paso 1:
Haga una salida de la restricción inferior de UIView

Paso 2:
Agregue un observador para mostrar y ocultar el teclado y luego cambie la constante de restricción de acuerdo con la altura del teclado.

//**In viewDidLoad method** // register for keyboard notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; // register for keyboard notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

Paso 3:
Administre restricciones como el teclado muestra y oculta las notificaciones como se muestra a continuación

- (void)keyboardWillShow:(NSNotification *)notification { NSDictionary* userInfo = [notification userInfo]; // get the size of the keyboard CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; CGSize keyboardSizeNew = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; [UIView animateWithDuration:0.2 animations:^{ _bottomConstraintofView.constant = keyboardSizeNew.height; [self.view layoutIfNeeded]; // Called on parent view }]; } - (void)keyboardWillHide:(NSNotification *)notification { [UIView animateWithDuration:0.2 animations:^{ _bottomConstraintofView.constant = 0; [self.view layoutIfNeeded]; }]; }

Solución en Swift

func keyboardWillShow(notification: NSNotification){ let userInfo:NSDictionary = notification.userInfo! let keyboardSize:CGSize = userInfo.objectForKey(UIKeyboardFrameBeginUserInfoKey)!.CGRectValue().size let keyboardSizeNow:CGSize = userInfo.objectForKey(UIKeyboardFrameEndUserInfoKey)!.CGRectValue().size UIView.animateWithDuration(0.2, animations: { () -> Void in self.bottomConstraintofView.constant = keyboardSizeNow.height self.view.layoutIfNeeded() }) } func keyboardWillHide(notification: NSNotification){ UIView.animateWithDuration(0.2, animations: { () -> Void in self.bottomConstraintofView.constant = 0 self.view.layoutIfNeeded() }) }