item example custom bar swift keyboard uisearchbar searchbar uisearchbardelegate

example - ¿Cómo hacer que el teclado se cierre cuando salgo de la barra de búsqueda en Swift?



swift back button programmatically (8)

Intento que mi barra de búsqueda sea rápida, pero tengo un problema para descartar el teclado en la pantalla cuando presiono fuera de la barra de búsqueda. Cuando intento con textfield funciona perfectamente bien con este código.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { self.view.endEditing(true) }

Funciona cuando salgo de mi campo de texto y luego el teclado se va. Quiero hacer eso con mi barra de búsqueda, porque cuando uso la barra de búsqueda y uso de la misma manera que el campo de texto, no funciona en absoluto. Cualquier referencia o código es muy útil para mí.


¡Probado y funcionando!

func searchBarSearchButtonClicked(searchBar: UISearchBar) { searchActive = false; self.mySearchBar.endEditing(true) }


podemos hacer esto con los siguientes métodos

func searchBarTextDidBeginEditing(searchBar: UISearchBar) { searchBar.showsCancelButton = true; } func searchBarTextDidEndEditing(searchBar: UISearchBar) { searchBar.showsCancelButton = false; }


prueba esto :

self.mySearchController.searchBar.endEditing(true)

reemplace mySearchController con su nombre de controlador creado. Si no lo creó de forma programática sino que simplemente arrastró una barra de búsqueda de la biblioteca, IBoutlet su búsqueda a su clase y la referencia como:

self.mySearchBar.endEditing(true)


En primer lugar , UISearchBarDelegate de Apple es la solución correcta para ocultar el teclado cuando los usuarios hacen clic en un botón de búsqueda mientras que la instancia de UISearchBar es la first responder (aprende UIResponder ). En resumen, searchBarSearchButtonClicked(_:) es lo que necesita para esta tarea.

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { searchBar.resignFirstResponder() // hides the keyboard. doThingsForSearching() }

Si no funciona, compruebe si su controlador se ajusta a UISearchBarDelegate y, en segundo lugar, ¿sabe UISearchBarDelegate acerca de la implementación de su clase (si no comprende exactamente de qué estoy hablando, debe aprender el delegation pattern comienza a leer here )?

class YourAwesomeViewController: UIViewController, UISearchBarDelegate { // pay attention here @IBOutlet weak var yourSearchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() self.yourSearchBar.delegate = self // and it''s important too } }

Además , si necesita ocultar el teclado tocando fuera de la search bar de search bar sin tocar el botón de búsqueda ( el usuario puede cambiar de opinión para buscar algo ), UITapGestureRecognizer es una forma sencilla de lidiar con eso.

  1. Ctrl-drag un Tap Gesture Recognizer desde la Object Library a su Controlador de vista.

  1. Ctrl-drag el Tap Gesture Recognizer recientemente agregado desde el document outline del document outline en el guión gráfico hasta la implementación de su clase como IBAction .

  1. Finalmente, escribe un código:

@IBAction func tapToHideKeyboard(_ sender: UITapGestureRecognizer) { self.yourSearchBar.resignFirstResponder() }

Además, no olvides crear @IBOutlet para que la barra de búsqueda tenga acceso dentro de tu implementación de clase.

Ambas variantes anteriores funcionan bien en mi proyecto.


Puede usar una extensión general de UIViewController 1. Solo haga la extensión de archivo y pegue el siguiente fragmento de código

Swift 4

extension UIViewController { func hideKeyboardWhenTappedAround() { let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard(_:))) tap.cancelsTouchesInView = false view.addGestureRecognizer(tap) } @objc func dismissKeyboard(_ sender: UITapGestureRecognizer) { view.endEditing(true) if let nav = self.navigationController { nav.view.endEditing(true) } } }

  1. Ahora llame a hideKeyboardWhenTappedAround () desde el método viewDidLoad

Swift 4+:

Puede intentar, creando un gesto de toque y agregar en el self.view

let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.singleTap(sender:))) singleTapGestureRecognizer.numberOfTapsRequired = 1 singleTapGestureRecognizer.isEnabled = true singleTapGestureRecognizer.cancelsTouchesInView = false self.view.addGestureRecognizer(singleTapGestureRecognizer)

y en selector func usted llama a self.searchBar.resignFirstResponder

@objc func singleTap(sender: UITapGestureRecognizer) { self.searchBar.resignFirstResponder() }


func searchBarSearchButtonClicked(searchBar: UISearchBar) { searchActive = false; searchProject.resignFirstResponder() }

Este método se invocará cuando el usuario haga clic en el botón Buscar en el teclado. Por lo tanto, podemos descartar el teclado. Creo que este es el método correcto.


class MaCaveViewController: UIViewController, UISearchBarDelegate { @IBOutlet weak var SearchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() SearchBar.delegate = self } // When button "Search" pressed func searchBarSearchButtonClicked(_ searchBar: UISearchBar){ print("end searching --> Close Keyboard") self.SearchBar.endEditing(true) } }

Este trabajo es muy bueno para mi.