4

按搜索键时如何关闭键盘?我在 tableView 上有一个搜索栏,我使用了以下方法。它没有用。任何想法为什么?提前致谢。

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

    textField.resignFirstResponder()
    return true

}

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

这张照片是我想要做的,当我点击搜索键时什么也没发生。 在此处输入图像描述

我已经设置了我的 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)

}
4

3 回答 3

14

如果您使用的是 UISearchBar 则首先确保已设置其委托,然后添加此功能

func searchBarSearchButtonClicked(_ searchBar: UISearchBar)  {
    searchBar.resignFirstResponder()
}
于 2017-02-21T05:58:01.357 回答
1

以下对我有用。

'searchActive' 用于在过滤值和原始未过滤值之间切换。

'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

   ...

}

...

于 2017-07-20T08:25:41.980 回答
0

确保viewDidLoad()你这样做self.textField.delegate = self,当然你viewController必须遵守UITextFieldDelegate协议。然后,确保您正确拼写该函数textFieldShouldReturn()

于 2017-02-21T05:57:02.650 回答