在 swift 3 的 tableView 上按搜索键时如何关闭键盘?
How to dismiss keyboard when pressing Search key on tableView in swift 3?
如何在按下搜索键时关闭键盘?我在 tableView 上有一个搜索栏,我使用了以下方法。它没有用。知道为什么吗?提前致谢。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
更新 2.0 ------------------------------------------ --------
这张照片是我想要做的,当我点击搜索键时没有任何反应。
enter image description here
我已经设置了 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)
}
确保在 viewDidLoad()
中执行 self.textField.delegate = self
,当然您的 viewController
必须符合 UITextFieldDelegate
协议。然后,确保您正确拼写函数 textFieldShouldReturn()
如果您使用的是 UISearchBar,那么首先要确保其委托已设置
然后添加这个函数
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
以下对我有用。
'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
...
}
...
如何在按下搜索键时关闭键盘?我在 tableView 上有一个搜索栏,我使用了以下方法。它没有用。知道为什么吗?提前致谢。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
更新 2.0 ------------------------------------------ --------
这张照片是我想要做的,当我点击搜索键时没有任何反应。 enter image description here
我已经设置了 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)
}
确保在 viewDidLoad()
中执行 self.textField.delegate = self
,当然您的 viewController
必须符合 UITextFieldDelegate
协议。然后,确保您正确拼写函数 textFieldShouldReturn()
如果您使用的是 UISearchBar,那么首先要确保其委托已设置 然后添加这个函数
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
以下对我有用。
'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
...
}
...