首先,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's important too
}
}
此外,如果您需要在search bar
不触摸搜索按钮的情况下隐藏键盘触摸(用户可能会改变主意搜索某些内容),UITapGestureRecognizer也是一种简单的处理方法。
Ctrl-drag
一个Tap Gesture Recognizer
从Object Library
你的视图控制器。

Ctrl-drag
最近Tap Gesture Recognizer
从document outline
情节提要中添加到您的类实现中的IBAction
.

- 最后,写一段代码:
@IBAction func tapToHideKeyboard(_ sender: UITapGestureRecognizer) {
self.yourSearchBar.resignFirstResponder()
}
此外,不要忘记创建 @IBOutlet
搜索栏以访问您的类实现。
上述两种变体都在我的项目中运行良好。