aji*_*aji 45 keyboard uisearchbar uisearchbardelegate searchbar swift
我尝试在swift上创建我的搜索栏,但是当我按下搜索栏时,我有一个问题就是在屏幕上关闭键盘.当我尝试使用textfield时,它可以很好地使用此代码.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
当我按下我的文本字段然后键盘消失时,它工作.我想用我的搜索栏制作这样的东西,因为当我使用搜索栏并使用与textfield相同的方式时,它根本不起作用.任何参考或代码对我都非常有用.
Kor*_*and 67
试试这个 :
self.mySearchController.searchBar.endEditing(true)
Run Code Online (Sandbox Code Playgroud)
用您创建的控制器名称替换mySearchController.如果您没有以编程方式创建它,而只是从库中拖动搜索栏,然后将IBoutlet可搜索到您的类并将其引用为:
self.mySearchBar.endEditing(true)
Run Code Online (Sandbox Code Playgroud)
Thi*_*guy 19
经过测试和工作!
func searchBarSearchButtonClicked(searchBar: UISearchBar)
{
searchActive = false;
self.mySearchBar.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
小智 8
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
searchProject.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)
当用户点击键盘上的搜索按钮时,将调用此方法.这里我们可以解除键盘.我认为这是正确的方法.
首先,Apple的UISearchBarDelegate是在用户单击搜索按钮而UISearchBar的实例为first responder(学习UIResponder)时隐藏键盘的正确解决方案。简而言之,searchBarSearchButtonClicked(_ :)是完成此任务所需要的。
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder() // hides the keyboard.
doThingsForSearching()
}
Run Code Online (Sandbox Code Playgroud)
如果它不起作用,请检查您的控制器是否符合要求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
}
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您需要隐藏触摸键盘的外部而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为搜索栏创建在类实现内部具有访问权限的对象。
上面的两个变体在我的项目中都运行良好。
小智 7
我发现使用Table View进行解雇更容易,更简单。(如果您使用的是表格视图)
斯威夫特4:
self.tableView.keyboardDismissMode = .onDrag
Run Code Online (Sandbox Code Playgroud)
小智 5
class MaCaveViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
}
// When button "Search" pressed
func searchBarSearchButtonClicked(_ searchBar: UISearchBar){
print("end searching --> Close Keyboard")
self.searchBar.endEditing(true)
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说非常有效。
迅捷4+:
您可以尝试创建点击手势并添加self.view
let singleTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.singleTap(sender:)))
singleTapGestureRecognizer.numberOfTapsRequired = 1
singleTapGestureRecognizer.isEnabled = true
singleTapGestureRecognizer.cancelsTouchesInView = false
self.view.addGestureRecognizer(singleTapGestureRecognizer)
Run Code Online (Sandbox Code Playgroud)
然后在选择器函数中调用 self.searchBar.resignFirstResponder
@objc func singleTap(sender: UITapGestureRecognizer) {
self.searchBar.resignFirstResponder()
}
Run Code Online (Sandbox Code Playgroud)
您可以使用通用的 UIViewController 扩展
代码
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard(_:)))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard(_ sender: UITapGestureRecognizer) {
view.endEditing(true)
if let nav = self.navigationController {
nav.view.endEditing(true)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42369 次 |
| 最近记录: |