Swift:键盘行为。为什么'touchesBegan'在使用scrollView时不会最小化键盘?

时间:2016-06-05 21:34:47

标签: ios iphone swift uiscrollview keyboard

在使用我的应用时,我一直操纵键盘行为 以获得更好的用户体验。 (即在文本字段外点击时最小化键盘。)

但是,每当我使用 ScrollView 作为Storyboard中ViewController上任何对象的背景时,我都无法使用以下代码关闭键盘...

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    self.view.endEditing(true)
}

每当我不在后台使用ScrollView时,此代码通常正常工作,但不能“与”它一起使用。

相反,我不得不求助于使用UITapGesture添加额外的代码来创建相同的效果......

e.g。在......

override func viewDidLoad() {
    super.viewDidLoad()
}

我必须添加以下第一 ...

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AddingViewController.dismissKeyBoard))
self.view.addGestureRecognizer(tap) // to Replace "TouchesBegan" - not work here.

然后是一个功能...... 第二次 ......

func dismissKeyBoard() {
    self.view.endEditing(true)
}

因此,我以前所需的全部工作量加倍touchesBegan

谁能让我知道为什么会这样?为什么ScrollView的存在会产生这种影响?

(注意:我正在努力理解这个问题,因为当我最初遇到这个问题时,它引起了相当多的挫折,直到我找到了“试错法”的解决方案)

1 个答案:

答案 0 :(得分:0)

我相信滚动视图已被点击。试试这个:

scrollView.userInteractionEnabled = false

如果您希望scrollView仍能滚动,请不要添加此内容;只需将点按手势添加到滚动视图即可。

scrollView.addGestureRecognizer(tap)