Yo trato de hacer mi barra de búsquedas en swift, pero tengo un problema para despedir el teclado en pantalla cuando se pulsa fuera de la barra de búsquedas. Cuando trato con textfield que funciona perfectamente con este código.

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

Que cuando yo pulse fuera de mi campo de texto y, a continuación, el teclado se ha ido. Quiero hacer como que con mi barra de búsquedas, porque cuando yo uso la barra de búsquedas y el uso de la misma manera como textfield, no funciona en absoluto. Cualquier código de referencia es muy útil para mí.

  • Usted puede encontrar la respuesta en el siguiente enlace: stackoverflow.com/questions/24908966/…
  • yo tenía que tratar de que manera puedo conseguir mi código de textfield y funciona perfectamente bien como lo que yo digo, pero tengo un problema cuando tengo que usar la barra de búsquedas, porque no puedo hacer que mi teclado despedir cuando me toque otra área fuera de mi barra de búsquedas
InformationsquelleAutor aji | 2015-04-28

10 Comentarios

  1. 62

    intente esto :

    self.mySearchController.searchBar.endEditing(true)

    reemplazar mySearchController con su creó el nombre del controlador..
    Si usted no crear mediante programación, pero en lugar de que usted acaba de arrastrar una barra de búsqueda de la biblioteca, a continuación, IBoutlet su búsqueda de su clase y de referencia como:

    self.mySearchBar.endEditing(true)
    • me podría dar alguna pista de cómo conseguir evento haga clic fuera de mi barra de búsquedas, porque cuando yo uso textfield, yo uso la función gusta lo que escribo antes y funciona de forma automática para conseguir evento cuando hago clic fuera de mi campo de texto. Me pueden ayudar a tener la función como la que en la barra de búsquedas
    • ¿arrastrar desde la biblioteca a su guión gráfico o creado a partir de una dentro de una clase.. ?
    • he arrastrado desde mi storyboard
    • Yo creo que tu solución es buena. Pero quiero saber qué evento que tengo cuando hago clic fuera de mi barra de búsquedas. Si yo conozco a ese evento, entonces yo podría tomar tu sugerencia en su interior y debe estar funcionando.
    • Supongo que usted está usando un formato tableview o una colección vista en la barra de búsqueda . ambos tienen descartar teclado casilla de verificación. Usted puede hacer uso de ellos.
    • intenta poner mi línea en el touchesBegan func. ? que debe hacerlo.
    • sí, la puse dentro de mi touchesBegan divertido, pero creo que sólo trabajando con textsielddelegate, no con searcbar.
    • He creado un proyecto de ejemplo para ti, échale un vistazo. koraybirand.co.reino unido/descarga.asp?usr=test&file=/download/…
    • Creo que me doy cuenta de somethink, que debo volver a conectar con cada vista por primera vez porque me hacen otro punto de vista de los padres y la barra de búsquedas como un niño, pero su solución es el trabajo, si puedo usar uno simple, gracias
    • Me doy cuenta de que a partir de este stackoverflow.com/questions/7482266/…

  2. 19

    Probado y funcionando!

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

    Editar para Swift 4.2

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
        {
            searchActive = false
            self.searchBar.endEditing(true)
        }
  3. 8
     func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    
            searchActive = false;
            searchProject.resignFirstResponder()
        }

    Este método se invoca cuando el usuario haga clic en botón de búsqueda en el teclado.Así que aquí podemos descartar teclado.Creo que este es el método correcto.

  4. 6

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

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

    Si no funciona, comprobar, ¿el controlador se ajustan a UISearchBarDelegate y en segundo lugar, ¿ UISearchBarDelegate saber acerca de su implementación de la clase (si usted no entiende lo que estoy hablando, usted debe aprender delegation pattern de empezar a leer aquí):

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

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

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

    Cómo hacer que el teclado despedir al pulsar fuera de la barra de búsquedas de Swift?

    1. Ctrl-drag el añadido recientemente Tap Gesture Recognizer de la document outline en el guión gráfico para su implementación de la clase como IBAction.

    Cómo hacer que el teclado despedir al pulsar fuera de la barra de búsquedas de Swift?

    1. Por último, escribir un código:

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

    También, no te olvides de crear @IBOutlet para la barra de búsqueda de tener un acceso en el interior de su implementación de la clase.

    De las dos variantes anteriores funcionan bien en mi proyecto.

  5. 5

    Me pareció más fácil y más simple para el uso de la Vista Tabla para el despido. (Si está utilizando la vista de tabla)

    Swift 4:

    self.tableView.keyboardDismissMode = .onDrag
    • Yo ni siquiera sabía que existía, gracias por compartir Domingo, trabajó como un encanto y una buena adición a también renunciar al teclado a través del botón de búsqueda.
  6. 4

    Swift 4+:

    Usted puede intentar, creando un toque gesto y agregar en el auto.ver

    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 el selector de func llamar self.searchBar.resignFirstResponder

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

    podemos hacer esto con métodos siguientes

        func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
            searchBar.showsCancelButton = true;
        }
    
        func searchBarTextDidEndEditing(searchBar: UISearchBar) {
            searchBar.showsCancelButton = false;
        }
  8. 0
    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)
        }
    }

    Esto funciona muy bien para mí.

  9. 0

    Puede utilizar un general UIViewController extensión
    1. Acaba de hacer el archivo de extensión 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 llamada hideKeyboardWhenTappedAround() de viewDidLoad método
  10. 0

    Esto funciona para mí en Swift 4

       func searchBarSearchButtonClicked(_ searchBar: UISearchBar){
    
        self.searchBar.endEditing(true)
    
        }

Dejar respuesta

Please enter your comment!
Please enter your name here