it-swarm.com.de

Wie kann ich die Tastatur verwerfen, wenn ich die Suchleiste von Swift drücke?

Ich versuche, meine Suchleiste auf Swift zu erstellen, aber ich habe ein Problem, die Tastatur auf dem Bildschirm zu schließen, wenn ich die Suchleiste gedrückt habe. Wenn ich mit Textfeld versuche, funktioniert es mit diesem Code perfekt.

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

Es funktioniert, wenn ich aus meinem Textfeld drücke und die Tastatur weg ist. Ich möchte das mit meiner Suchleiste machen, denn wenn ich die Suchleiste verwende und auf dieselbe Weise wie das Textfeld verwende, funktioniert das überhaupt nicht. Jede Referenz oder Code ist für mich sehr nützlich.

37
aji

versuche dies :

self.mySearchController.searchBar.endEditing(true)

ersetzen Sie mySearchController durch Ihren erstellten Controller-Namen ... Wenn Sie ihn nicht programmgesteuert erstellt haben, sondern stattdessen einfach eine Suchleiste aus der Bibliothek gezogen haben, dann IBoutlet Ihre durchsuchbare Klasse in Ihre Klasse und darauf verweisen:

self.mySearchBar.endEditing(true)
51
Koray Birand

Getestet und funktioniert!

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

        searchActive = false;
        searchProject.resignFirstResponder()
    }

Diese Methode wird aufgerufen, wenn der Benutzer auf die Schaltfläche "Suchen" auf der Tastatur klickt. Hier können wir die Tastatur verwerfen. Ich denke, das ist die richtige Methode.

8
user3962845

Erstens ist Apples ISearchBarDelegate die richtige Lösung, um die Tastatur auszublenden, wenn Benutzer auf eine Suchschaltfläche klicken, während ISearchBar = 's Instanz ist der first responder (learn IResponder ). Kurz gesagt, searchBarSearchButtonClicked (_:) ist das, was Sie für diese Aufgabe benötigen.

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

Wenn es nicht funktioniert, prüfen Sie, ob Ihr Controller UISearchBarDelegate entspricht, und zweitens, ob UISearchBarDelegate Ihre Klassenimplementierung kennt (wenn Sie nicht genau verstehen, wovon ich spreche, Sie) sollte lernen delegation pattern zu lesen hier ):

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

Weiter , wenn Sie die außerhalb von search bar Berührende Tastatur ausblenden müssen, ohne die Suchschaltfläche zu berühren ( der Benutzer kann sich ändern Seine Absicht, etwas zu suchen), ITapGestureRecognizer ist auch eine einfache Möglichkeit, damit umzugehen.

  1. Ctrl-drag Ein Tap Gesture Recognizer Von Object Library Zu Ihrem View Controller.

enter image description here

  1. Ctrl-drag Das kürzlich hinzugefügte Tap Gesture Recognizer Aus dem document outline Im Storyboard zu Ihrer Klassenimplementierung als IBAction.

enter image description here

  1. Schreiben Sie zum Schluss einen Code:

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

Vergessen Sie auch nicht, @IBOutlet Für die Suchleiste zu erstellen, um Zugriff auf Ihre Klassenimplementierung zu erhalten.

Beide oben genannten Varianten funktionieren in meinem Projekt gut.

6
Ivan Shokurov

Ich fand es einfacher und einfacher, die Tabellenansicht zum Kündigen zu verwenden. (Wenn Sie die Tabellenansicht verwenden)

Swift 4:

self.tableView.keyboardDismissMode = .onDrag
4
Dominic Smith

Swift 4+:

Sie können versuchen, eine Tap-Geste zu erstellen und sie in der Ansicht self.view hinzuzufügen

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

und in der Auswahlfunktion rufen Sie self.searchBar.resignFirstResponder an 

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

Sie können eine allgemeine UIViewController-Erweiterung verwenden 1. Machen Sie einfach eine Erweiterungsdatei und fügen Sie das folgende Code-Snippet ein 

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. Rufen Sie jetzt hideKeyboardWhenTappedAround () aus der viewDidLoad -Methode auf 
0
dip
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)
    }
}

Das funktioniert sehr gut für mich.

0
XenoX

Das funktioniert für mich in Swift 4

   func searchBarSearchButtonClicked(_ searchBar: UISearchBar){

    self.searchBar.endEditing(true)

    }
0
nanospeck

wir können dies mit den folgenden Methoden tun

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

    func searchBarTextDidEndEditing(searchBar: UISearchBar) {
        searchBar.showsCancelButton = false;
    }
0
rak