¿Es posible obtener el marco, en realidad su altura, del teclado de forma dinámica? Como tengo un UITextView
y me gustaría ajustar su altura de acuerdo con la altura del cuadro del teclado, cuando se cambia el método de entrada del teclado. Como sabe, los diferentes métodos de entrada pueden tener diferentes alturas de cuadro del teclado.Obtener el marco del teclado de forma dinámica
Respuesta
intente esto:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification
object:nil];
- (void)keyboardWasShown:(NSNotification *)notification
{
// Get the size of the keyboard.
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Given size may not account for screen rotation
int height = MIN(keyboardSize.height,keyboardSize.width);
int width = MAX(keyboardSize.height,keyboardSize.width);
//your other code here..........
}
Simplemente sigue este tutorial de Apple y obtendrás lo que quieras. Apple Documentation. Para determinar el área cubierta por el teclado, consulte este tutorial.
Pero, ¿cómo podría detectar el método de entrada para cambiar la acción? –
Si usted es el programador, entonces debe saber qué teclado de entrada ha abierto en cualquier momento. – doNotCheckMyBlog
Desearía saberlo, pero no pude. Si sabe cómo detectar el método de entrada, cambie la acción y obtenga la altura del teclado actual, ¿podría informarme amablemente? Realmente lo aprecio :) –
Para los usuarios Swift 3, el código @Hector (con algunas adiciones) sería:
En su viewDidLoad
añadir el observador:
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidShow(_:)), name: .UIKeyboardDidShow , object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardDidHide(_:)), name: .UIKeyboardDidHide , object: nil)
A continuación, implemente los métodos:
func keyboardDidShow(_ notification: NSNotification) {
print("Keyboard will show!")
// print(notification.userInfo)
let keyboardSize:CGSize = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue.size
print("Keyboard size: \(keyboardSize)")
let height = min(keyboardSize.height, keyboardSize.width)
let width = max(keyboardSize.height, keyboardSize.width)
}
func keyboardDidHide(_ notification: NSNotification) {
print("Keyboard will hide!")
}
Puede agregar este código a la vista que contiene el campo de texto en Swift 3. Esto hará que el campo de texto se mueva hacia arriba y hacia abajo con el teclado.
private var keyboardIsVisible = false
private var keyboardHeight: CGFloat = 0.0
// MARK: Notifications
private func registerForKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
private func deregisterFromKeyboardNotifications() {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
// MARK: Triggered Functions
@objc private func keyboardWillShow(notification: NSNotification) {
keyboardIsVisible = true
guard let userInfo = notification.userInfo else {
return
}
if let keyboardHeight = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.height {
self.keyboardHeight = keyboardHeight
}
if !textField.isHidden {
if let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber,
let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber {
animateHUDWith(duration: duration.doubleValue,
curve: UIViewAnimationCurve(rawValue: curve.intValue) ?? UIViewAnimationCurve.easeInOut,
toLocation: calculateTextFieldCenter())
}
}
}
@objc private func keyboardWillBeHidden(notification: NSNotification) {
keyboardIsVisible = false
if !self.isHidden {
guard let userInfo = notification.userInfo else {
return
}
if let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? NSNumber,
let curve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber {
animateHUDWith(duration: duration.doubleValue,
curve: UIViewAnimationCurve(rawValue: curve.intValue) ?? UIViewAnimationCurve.easeInOut,
toLocation: calculateTextFieldCenter())
}
}
}
// MARK: - Helpers
private func animateHUDWith(duration: Double, curve: UIViewAnimationCurve, toLocation location: CGPoint) {
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(TimeInterval(duration))
UIView.setAnimationCurve(curve)
textField.center = location
UIView.commitAnimations()
}
private func calculateTextFieldCenter() -> CGPoint {
if !keyboardIsVisible {
return self.center
} else {
let yLocation = (self.view.frame.height - keyboardHeight)/2
return CGPoint(x: self.center.x, y: yLocation)
}
}
- 1. Cambie el tamaño del panel de forma dinámica
- 2. Teclado personalizado: inputView: cómo cambiar el tamaño del teclado?
- 3. Obtener los idiomas disponibles de la aplicación de forma dinámica
- 4. python sqlalchemy obtener nombres de columna de forma dinámica?
- 5. Android - Obtener la tecla del teclado presione
- 6. ¿Cómo obtener el marco de video del AVPlayer?
- 7. ¿Cómo obtener el brillo de la pantalla actual en el código de Android de forma dinámica?
- 8. cómo obtener ventaja del marco sin estado
- 9. contenido del iframe creado de forma dinámica está vacía
- 10. ¿Hay alguna forma de obtener la URL principal del contenido de un marco flotante?
- 11. cómo cambiar la clase del fragmento de forma dinámica
- 12. ¿Cómo utilizar el marco del núcleo bluetooth obtener datos?
- 13. PrimeFaces CommandButton: activar de forma dinámica/desactivar el icono CommandButton
- 14. Cómo crear un predicado de forma dinámica
- 15. obtener datos del valor de la clave dinámica en json
- 16. El uso de styleSheets de forma dinámica agrega mucho cálculo
- 17. Forma gratuita Región web.config dinámica
- 18. Personalización del teclado del iPhone
- 19. Cómo cambiar el color del botón y el texto de forma dinámica en Android
- 20. Cómo obtener el marco para NSStatusItem
- 21. cómo cambiar la altura y el ancho del diseño del marco de forma programática?
- 22. Teclado numérico del iPad
- 23. Cambia el color del teclado en iphone
- 24. Obtener el tamaño del teclado en pantalla del iPad después de la rotación
- 25. Modificar el indicador de pestaña de forma dinámica en Android
- 26. ¿Podemos especificar el grado de paralelismo de forma dinámica?
- 27. ¿Cómo puedo evaluar el código de C# de forma dinámica?
- 28. Emacs que determina el diseño del teclado
- 29. Obtener posición de cursor Teclado de Android
- 30. jQuery - presione el carácter - INDEPENDIENTE del teclado
Esto es particularmente útil cuando se trabaja con diferentes teclados de altura/tipo en iOS8. Hasta ahora, simplemente hardcoding 216 (retrato) haría el truco. Gracias. – n00bProgrammer
en ios 8 todavía está returándose 216, lo cual es incorrecto. – harshitgupta
@Hector ¿Funcionará también para iOS8? – msmq