简体   繁体   English

如何在swift 3中的tableView上按搜索键时关闭键盘?

[英]How to dismiss keyboard when pressing Search key on tableView in swift 3?

How to dismiss keyboard when pressing Search key? 按搜索键时如何关闭键盘? I have a search bar on tableView and I used the following method. 我在tableView上有一个搜索栏,我使用了以下方法。 It did't work. 它没用。 Any Idea why? 任何想法为什么? Thanks in advance. 提前致谢。

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true

}

UPDATE 2.0 ---------------------------------------------------- 更新2.0 ------------------------------------------------ ----

This picture is what I am trying to do, when I click search key nothing happened. 这张照片是我想要做的,当我点击搜索键时什么也没发生。 enter image description here 在此输入图像描述

I have my UISearchBar delegate has set already 我已经设置了我的UISearchBar委托

class SearchVC: UIViewController, UITableViewDataSource, UISearchBarDelegate  {


@IBOutlet weak var tableView: UITableView!

@IBOutlet weak var searchBar: UISearchBar!

var data = [// my data here.]

var filteredData: [String]!

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    searchBar.delegate = self
    filteredData = data


    let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
    tableView.addGestureRecognizer(tap)

}

If you are using UISearchBar then first make sure its delegate is set and then add this function 如果您正在使用UISearchBar,那么首先确保其委托已设置,然后添加此功能

func searchBarSearchButtonClicked(_ searchBar: UISearchBar)  {
    searchBar.resignFirstResponder()
}

The following worked for me. 以下对我有用。

'searchActive' is used to switch between the filtered values and the original unfiltered values. 'searchActive'用于在过滤值和原始未过滤值之间切换。

'initialUseOfSearchBar' is used to show the keyboard the first time around but after that keyboard is hidden when user presses clear 'x'. 'initialUseOfSearchBar'用于第一次显示键盘,但在用户按下清除'x'后隐藏键盘。

var initialUseOfSearchBar = true

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
    searchActive = true

    if searchBar.text?.characters.count == 0 {
        searchActive = false

        if initialUseOfSearchBar == false {
            searchBar.resignFirstResponder()
        }
    }
}

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
    searchActive = false
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    searchActive = false
}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    searchActive = false
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

    if searchText.characters.count == 0 {
        searchActive = false;
        tableView.reloadData()
        searchBar.resignFirstResponder()
    }

    initialUseOfSearchBar = false

   ...

}

... ...

make sure in viewDidLoad() you do self.textField.delegate = self and of course your viewController must conform to the UITextFieldDelegate protocol. 确保在viewDidLoad()你做self.textField.delegate = self ,当然你的viewController必须符合UITextFieldDelegate协议。 Then, make sure you are spelling the function correctly textFieldShouldReturn() 然后,确保正确拼写函数textFieldShouldReturn()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM