如何在swift 3中按下tableView的搜索键时隐藏键盘?

5
如何在按下搜索键时取消键盘?我在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)

}

如果方便的话,您可以使用 https://github.com/hackiftekhar/IQKeyboardManager。 - sweta.me
你能检查一下是否设置了textField的代理吗? - Ram
textFiledShouldReturn 应该改为 textFieldShouldReturn... 方法名中的 "Field"。 - sweta.me
你正在使用 UISearchbar 吗? - Anbu.Karthik
@Anbu.Karthik 是的,我在tableView上使用UISearchbar。我正试图在按下搜索键时使键盘消失。 - QQ10
显示剩余6条评论
3个回答

14

如果您正在使用UISearchBar,则首先确保设置了其委托,然后添加此函数。

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

嗨,我已经有这个函数了。我想做的是当我点击搜索栏时,键盘会弹出,当我点击搜索键时,键盘会消失。我不确定如何完成第二部分。 - QQ10
你能否检查一下是否已经设置好了UIsearchBar的代理? - Ram
我没有 func searchBarSearchButtonClicked(searchBar: UISearchBar) { } 这个函数。在这个函数里应该做什么? - QQ10
类 ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {@IBOutlet weak var searchBar: UISearchBar! override func viewDidLoad() { super.viewDidLoad() /* 设置代理 */ searchBar.delegate = self } func searchBarSearchButtonClicked(searchBar: UISearchBar) { searchBar.resignFirstResponder() }} - Ram
非常感谢!我解决了我的问题。我错过了 func searchBarSearchButtonClicked(searchBar: UISearchBar) { searchBar.resignFirstResponder() }。 - QQ10

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

   ...

}

...


0

viewDidLoad() 中确保你做了 self.textField.delegate = self,当然你的 viewController 必须遵循 UITextFieldDelegate 协议。然后,确保你正确拼写函数名textFieldShouldReturn()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接