es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

UITextfield oculto detrás del teclado

Estoy construyendo una aplicación que contiene una búsqueda o un UITextField y está ubicado en la parte inferior de la vista cerca del área segura, por lo que cuando lo toco y aparece el teclado, el UITextField queda oculto detrás del teclado.

¿Cómo puedo hacer que cuando aparezca el teclado, el UITextField se mueva justo encima de él?
Aquí está el código que tengo en el viewController.swift:
“`import UIKit

class ViewController: UIViewController {

@IBOutlet weak var windLabel: UILabel!
@IBOutlet weak var cityLabel: UILabel!
@IBOutlet weak var tempLabel: UILabel!
@IBOutlet weak var searchCItyTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
searchCItyTextField.delegate = self
}
}

//MARK: – UITextFieldDelegate
extension UIViewController: UITextFieldDelegate {
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
self.view.endEditing(true)
return true
}
}
“`
Aquí están las capturas de pantalla:
ViewController sin el teclado
ViewController con teclado

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el UITextField se mueva hacia arriba cuando aparece el teclado, puedes agregar un observador de notificaciones que escuche las notificaciones cada vez que cambia el estado del teclado, y ajustar la posición del UITextField en consecuencia. Aquí tienes un ejemplo de fragmento de código que puedes agregar a tu controlador de vista:

    class ViewController: UIViewController {
    
        // tu código existente...
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            searchCItyTextField.delegate = self
    
            // Agregar un observador para escuchar las notificaciones del teclado
            NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
        }
    
        // Esta función se llama cada vez que el teclado aparece/desaparece o cambia su altura
        @objc func keyboardWillChange(notification: Notification) {
            // Obtener el marco final del teclado
            guard let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
    
            // Calcular la distancia entre la parte inferior de la vista y la parte superior del teclado
            let viewBottom = view.frame.height - view.safeAreaInsets.bottom
            let keyboardTop = keyboardRect.origin.y
            let distance = keyboardTop - viewBottom
    
            // Si el teclado está cubriendo el campo de texto, mover el campo de texto hacia arriba
            if distance < 0 {
                UIView.animate(withDuration: 0.3) {
                    self.view.transform = CGAffineTransform(translationX: 0, y: distance)
                }
            } else {
                UIView.animate(withDuration: 0.3) {
                    self.view.transform = .identity
                }
            }
        }
    
        // tu código existente...
    }
    

    Lo que hace este código es agregar un observador para escuchar la notificación UIResponder.keyboardWillChangeFrameNotification, que se emite cada vez que cambia el estado del teclado. Cuando se recibe la notificación, se llama a la función keyboardWillChange, que extrae el marco final del teclado y calcula la distancia entre la parte inferior de la vista y la parte superior del teclado. Si la distancia es negativa, significa que el teclado está cubriendo el campo de texto, por lo que la vista se traduce hacia arriba por la distancia en un bloque de animación. Si la distancia es cero o positiva, significa que el campo de texto no está cubierto por el teclado y la vista se restablece a su posición original.

Comments are closed.