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()
})
}