我在视图下有一个文本字段,该视图位于视图控制器内的滚动视图下,该视图控制器是导航控制器的视图控制器之一。我想在用户触摸文本字段外时关闭键盘。我尝试使用touchesBegan:
,但在滚动视图下它没有触发。我也尝试在滚动视图中禁用用户交互,但没有任何效果。谁能帮助我?
func dismissKeyboard(txtField:UITextField)
{
txtField.resignFirstResponder()
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
dismissKeyboard(firstNameTxt)
}
更改了以下方式以使其正常工作
extension AddEditHireViewController {
func hideKeyboard()
{
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: "dismissKeyboardNew")
self.formView.addGestureRecognizer(tap)
}
func dismissKeyboardNew()
{
self.formView.endEditing(true)
// self.dismissKeyboard(self.firstNameTxt)
} }
答案 0 :(得分:1)
您可以尝试创建视图控制器的扩展名。这对我来说更顺畅,而且比试图使用.resignFirstResponder()
extension UIViewController
{
func hideKeyboard()
{
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(UIViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
}
func dismissKeyboard()
{
view.endEditing(true)
}
}
在self.hideKeyboard()
viewDidLoad
答案 1 :(得分:1)
虽然Matthew Bradshaw给出的解决方案也有效,但如果用户滚动则不会解除键盘。如果您希望它这样做,另一个解决方案是子类UIScrollView
。然后,您可以覆盖此子类中的touchesBegan
方法,然后相应地结束编辑。
class DismissableScrollView: UIScrollView {
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
endEditing(false)
}
}
完成此操作后,只需将现有的UIScrollView
类更改为DismissableScrollView
,或者如果您已经将UIScrollView
子类化,则可以将其添加到该子类中