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.
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)
Getestet und funktioniert!
func searchBarSearchButtonClicked(searchBar: UISearchBar)
{
searchActive = false;
self.mySearchBar.endEditing(true)
}
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.
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.
Ctrl-drag
Ein Tap Gesture Recognizer
Von Object Library
Zu Ihrem View Controller.Ctrl-drag
Das kürzlich hinzugefügte Tap Gesture Recognizer
Aus dem document outline
Im Storyboard zu Ihrer Klassenimplementierung als IBAction
.@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.
Ich fand es einfacher und einfacher, die Tabellenansicht zum Kündigen zu verwenden. (Wenn Sie die Tabellenansicht verwenden)
Swift 4:
self.tableView.keyboardDismissMode = .onDrag
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()
}
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)
}
}
}
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.
Das funktioniert für mich in Swift 4
func searchBarSearchButtonClicked(_ searchBar: UISearchBar){
self.searchBar.endEditing(true)
}
wir können dies mit den folgenden Methoden tun
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchBar.showsCancelButton = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchBar.showsCancelButton = false;
}