我在一个视图控制器下的滚动视图下的视图下有一个文本字段,该视图控制器是导航控制器的视图控制器之一。当用户在文本字段外触摸时,我想关闭键盘。我尝试使用touchesBegan:,但是在scrollview下时不会触发。我也尝试在滚动视图中禁用用户交互,但没有任何效果。有人可以帮我吗?

 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)

    } }

最佳答案

尽管Matthew Bradshaw提供的解决方案也可以使用,但是如果用户滚动,它也不会关闭键盘。如果您希望这样做,则另一个解决方案是子类UIScrollView。然后,您可以在此子类中重写touchesBegan方法,然后相应地结束编辑。

class DismissableScrollView: UIScrollView {
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        endEditing(false)
    }
}

完成此操作后,只需将现有UIScrollView的类更改为DismissableScrollView,或者如果您已经对UIScrollView进行了子类化,则可以将其添加到该子类中。

关于ios - touches开始在scrollview下关闭键盘textview不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38277448/

10-10 22:25