aji*_*aji 45 keyboard uisearchbar uisearchbardelegate searchbar swift
我尝试在swift上创建我的搜索栏,但是当我按下搜索栏时,我有一个问题就是在屏幕上关闭键盘.当我尝试使用textfield时,它可以很好地使用此代码.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        self.view.endEditing(true)
    }   
当我按下我的文本字段然后键盘消失时,它工作.我想用我的搜索栏制作这样的东西,因为当我使用搜索栏并使用与textfield相同的方式时,它根本不起作用.任何参考或代码对我都非常有用.
Kor*_*and 67
试试这个 :
self.mySearchController.searchBar.endEditing(true)
用您创建的控制器名称替换mySearchController.如果您没有以编程方式创建它,而只是从库中拖动搜索栏,然后将IBoutlet可搜索到您的类并将其引用为:
self.mySearchBar.endEditing(true)
Thi*_*guy 19
经过测试和工作!
func searchBarSearchButtonClicked(searchBar: UISearchBar) 
{
    searchActive = false;
    self.mySearchBar.endEditing(true)
}
小智 8
 func searchBarSearchButtonClicked(searchBar: UISearchBar) {
        searchActive = false;
        searchProject.resignFirstResponder()
    }
当用户点击键盘上的搜索按钮时,将调用此方法.这里我们可以解除键盘.我认为这是正确的方法.
首先,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为搜索栏创建在类实现内部具有访问权限的对象。
上面的两个变体在我的项目中都运行良好。
小智 7
我发现使用Table View进行解雇更容易,更简单。(如果您使用的是表格视图)
斯威夫特4:
self.tableView.keyboardDismissMode = .onDrag
小智 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)
    }
}
这对我来说非常有效。
迅捷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)
然后在选择器函数中调用 self.searchBar.resignFirstResponder 
@objc func singleTap(sender: UITapGestureRecognizer) {
    self.searchBar.resignFirstResponder()
}
您可以使用通用的 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)
        }
    }
 }
| 归档时间: | 
 | 
| 查看次数: | 42369 次 | 
| 最近记录: |