在文本字段外触摸时如何关闭键盘?

Posted

技术标签:

【中文标题】在文本字段外触摸时如何关闭键盘?【英文标题】:How to dismiss keyboard when touch outside the textfield? 【发布时间】:2017-01-18 07:39:45 【问题描述】:

我有这个结构:

 ViewController
     |
  MainView  <-- Give a Tap value =1
     |
  ScrollView
     |
    View <-- give a Tag value =2
      |
     another View use to contain textFields  <-- give a tap value =3

View 的宽度与 Scrollview 和 MainView 相同。

“另一个视图”的宽度与视图不同。在“另一个视图”中,我有几个文本字段。

问题:在视图上或文本字段外触摸,键盘不会关闭。

我已经为键盘实现了这个,但它不起作用。

 override func toucheBegan(touches: Set<UITouch>, withEvent event:UiEvent?)

      if (view.tag == 1) 

            //- this refer to main view
            view.endEditing(true)

       else 

         //- this refer to the other view.
      view.endEditing(true)

      

--Upate:<br/>

  override func toucheBegan(touches: Set<UITouch>, withEvent event:UiEvent?)

      self.view.endEditing(true)  // with or without self


【问题讨论】:

您没有检查正确的视图标签。您正在检查主视图标签 你在视图上设置了 userInteractionEnabled 吗? 我是否需要为每个视图(主视图、视图、另一个视图)放置一个标签值?仅当主视图位于视图后面时,如何在用户可以触摸视图和另一个视图时引用哪个视图。已为 3 个视图设置了 UserInteractionEnabled。 【参考方案1】:

尝试下面的代码,当用户触摸uiviewcontroller的视图时隐藏键盘,代码在swift 3.0,希望对你有帮助。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    self.view.endEditing(true) //This will hide the keyboard

否则您必须为该特定视图设置 uitapgesturerecognizer,或者您可以使该视图 uicontrol 并设置 touchupinside 事件, 您所要做的就是从上述任何事情中调用 self.view.endEditing(true)

【讨论】:

第一个选项在使用 touchesBegan 时不起作用。为什么?第二个选项怎么做? @MilkBottle 将 uitapgesturerecognizer 添加到您想要在触摸时隐藏键盘的视图中。并将 self.view.endEditing(true) 添加到您在 tapgesturere 上设置的功能

以上是关于在文本字段外触摸时如何关闭键盘?的主要内容,如果未能解决你的问题,请参考以下文章

触摸整个应用程序时如何关闭键盘

触摸 UIControl 时如何关闭键盘?

Swift - 如何在文本字段之外点击后关闭数字键盘

resignFirstResponder 不关闭 UITextField 的 ASCII 键盘

iPhone:如何以编程方式激活文本字段(而不是等待用户触摸它)

在本机反应中单击 TextInput 字段外部时失去焦点并关闭键盘?