Подтвердить что ты не робот

Как отключить клавиатуру, когда я нажимаю строку поиска на Swift?

Я стараюсь, чтобы моя поисковая панель была быстрой, но у меня есть проблема, чтобы убрать клавиатуру на экране, когда я нажал кнопку поиска. Когда я пытаюсь использовать текстовое поле, он отлично работает с этим кодом.

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

Он работает, когда я выжимаю свое текстовое поле, а затем клавиатура исчезает. Я хочу сделать это с помощью своего поиска, потому что, когда я использую панель поиска и использую то же самое, что и текстовое поле, это не работает вообще. Любая ссылка или код очень полезны для меня.

4b9b3361

Ответ 1

попробуйте следующее:

self.mySearchController.searchBar.endEditing(true)

замените mySearchController на имя созданного контроллера. Если вы не создали его программным способом, а вместо этого вы просто перетащили строку поиска из библиотеки, то IBoutlet ваш поиск для вашего класса и ссылайтесь на него как:

self.mySearchBar.endEditing(true)

Ответ 2

Проверено и работает!

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

Редактировать для Swift 4.2

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

Ответ 3

 func searchBarSearchButtonClicked(searchBar: UISearchBar) {

        searchActive = false;
        searchProject.resignFirstResponder()
    }

Этот метод будет вызываться, когда пользователь нажимает кнопку поиска на клавиатуре. Поэтому мы можем отменить клавиатуру. Я думаю, что это правильный метод.

Ответ 4

Во-первых, Apple UISearchBarDelegate - это правильное решение для скрытия клавиатуры, когда пользователи нажимают кнопку поиска, в то время как экземпляр UISearchBar является first responder (изучите UIResponder). Вкратце, searchBarSearchButtonClicked (_ :) - это то, что вам нужно для этой задачи.

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

Если он не работает, проверьте, соответствует ли ваш контроллер UISearchBarDelegate и, во-вторых, знает ли UISearchBarDelegate о реализации вашего класса (если вы не совсем понимаете, о чем я говорю, вам следует изучить delegation pattern начинающий читать здесь):

class YourAwesomeViewController: UIViewController, UISearchBarDelegate { // pay attention here

    @IBOutlet weak var yourSearchBar: UISearchBar!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.yourSearchBar.delegate = self // and it important too
    }
}

Кроме того, если вам нужно скрыть прикосновение клавиатуры за пределами search bar не касаясь кнопки поиска (пользователь может передумать что-то искать), UITapGestureRecognizer также является простым способом справиться с этим.

  1. Ctrl-drag Tap Gesture Recognizer из Object Library на свой контроллер вида.

enter image description here

  1. Ctrl-drag недавно добавленный Tap Gesture Recognizer из document outline в раскадровке в вашу реализацию класса как IBAction.

enter image description here

  1. Наконец, напишите код:

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

Кроме того, не забудьте создать @IBOutlet для панели поиска, чтобы иметь доступ внутри реализации вашего класса.

Оба варианта выше работают хорошо в моем проекте.

Ответ 5

Swift 4+:

Вы можете попробовать, создав жест нажатия и добавьте в 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)

и в функции selector вы вызываете self.searchBar.resignFirstResponder

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

Ответ 6

Мне было проще и проще использовать Table View для увольнения. (Если вы используете табличное представление)

Свифт 4:

self.tableView.keyboardDismissMode = .onDrag

Ответ 7

мы можем сделать это следующими способами:

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

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

Ответ 8

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

Это очень хорошо для меня.

Ответ 9

Вы можете использовать общее расширение UIViewController 1. Просто создайте файл расширения и вставьте следующий фрагмент кода

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. Теперь вызовите hideKeyboardWhenTappedAround() из метода viewDidLoad

Ответ 10

Добавление tableView.keyboardDismissMode =.onDrag к viewDidLoad() работает как шарм.

Ответ 11

Это работает для меня в Swift 4

   func searchBarSearchButtonClicked(_ searchBar: UISearchBar){

    self.searchBar.endEditing(true)

    }