在编辑后隐藏键盘时,UISearchbar会隐藏自身吗?

时间:2019-02-19 12:00:11

标签: ios swift uisearchbar first-responder resignfirstresponder

我展示了一个使用导航控制器的屏幕,在该屏幕中,我有一个搜索栏,它是作为viewWillAppear()中的第一响应者制作的。问题是我想在单击完成按钮或单击searchBar中的取消时隐藏键盘。但是在对resignFirstResponder()和searchBar.endEditing(true)进行相同操作时,它也会隐藏UISearchBar。当状态也未处于编辑状态时,我想显示UISearchBar。

基本上,我所做的就是将UISearchBar设置为我的第一响应者:

override func viewWillAppear(_ animated: Bool) {
    searchBar.becomeFirstResponder()
}

然后,当用户点击搜索时,我进行了搜索:

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    searchBar.resignFirstResponder()
    // Remove focus from the search bar.
}

与“取消”按钮相同。但是就我而言,这不仅仅是关闭键盘,而是在调用上述函数后也隐藏了UISearchbar()。

2 个答案:

答案 0 :(得分:0)

在这种情况下,使用NotificationCenter是更好的方法。您没有共享任何代码,因此我将在我的旧项目中举一个例子

在您的ViewDidLoad函数中声明

override func viewDidLoad() {
    super.viewDidLoad()

     NotificationCenter.default.addObserver(self, selector: #selector(keyboardHide), name: UIResponder.keyboardWillHideNotification, object: nil)

}

并在“按钮”操作中创建一个函数

@objc func keyboardHide() {

    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
        self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height) 
    }, completion: nil)

}

以上代码应将键盘隐藏0.5秒以上。

答案 1 :(得分:0)

使用NotificationCenter addObserver获取键盘显示和键盘隐藏事件

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShowNotification(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHideNotification(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

// MARK: - Keyboard Hide/Show Functions
@objc func keyboardWillShowNotification(notification: Notification) {
    print("Keyboaed Show")
}

@objc func keyboardWillHideNotification(notification: Notification) {
    print("Keyboaed Hide")
}

注意:-不要忘记在UIviewContoller消失时删除观察者。

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}