迅捷的小吃104:回来!

嗨,Snackers,在这一集中,我们将使用UIGestureRecogniser来关闭键盘。

首先,我将等您摆脱讨厌的Main.storyboard(有关指导,请参阅101)。 在AppDelegate中,构建将电影投影到的电影屏幕(又称窗口)。 将视图控制器设置为电影屏幕的rootViewController。

现在,跳入我们的视图控制器,以详细说明并执行2个新textField的块(步骤1)。 太好了,现在将我们的textFields作为子视图添加到控制器的视图中(步骤2)。 要完成初始设置,请应用AutoLayout约束来确定textField在视图控制器范围内的位置和大小(步骤3)。

运行应用程序。 您将看到一个带有2个textField的灰色视图控制器; 即文本字段ONE和文本字段2。 按下这些文本字段中的任何一个将触发键盘显示自己。

我们的任务,在此零食中,它使用户能够使用触摸关闭键盘。

为了检测触摸,我们将使用类UITapGestureRecognizer,因为该类已被设计为“查找单次或多次点击”。 将关键字“ tapRec”设置为此类的实例,然后将目标添加到同一关键字。 现在,在将手势识别器添加到视图之后,用户“点击”将调用设置tapRec的目标时指定的功能,即func handleTouch。


未来的菲尔说:

Bruh,只需在handleTouch方法中添加“ view.endEditing(true)”。


使用“ view.endEditing(true)”代替以下内容:–

在继续之前,让我们更详细地了解一下TextView。 UITextView是UIControl的子类,“ UIControl的基类,[..]传达特定的动作或意图以响应用户交互”。 在我们的应用中,当按下textFields之一时,它成为firstResponder —“响应者链中接收事件或操作消息的第一个对象”。 当UITextField成为firstResponder时,出于明显的原因显示了键盘。 要关闭键盘,“活动”文本字段必须退出第一响应者状态,即resignFirstResponder。 因此,在我们的handleTouch方法中,我们必须先确定哪个textField当前是第一响应者,然后再指示其退出第一响应者状态。

小吃店,这是我们的朋友Stack Overflow进入现场的地方。 Google先生。 请咨询Stack Overflow,以查找如何最好地识别当前的firstResponder。 你说什么

是否可以通过任何方式询问iOS视图中哪个孩子的第一响应者身份?

在Mac OS X中,您可以找到像这样的第一个响应者:[[自身窗口] firstResponder]是否可以在…中进行任何操作?

stackoverflow.com

感谢Jakob Egger。 此UIResponder类扩展将操作发送到未指定的目标。 重要的是,“ [sendAction]的默认实现在未指定目标的情况下将操作[..]分配给第一响应者。” 因此,将findFirstResponder函数发送到firstResponder对象。 作为响应,将firstResponder设置为_currentFirstResponder变量。

最后,我们可以完成handleTouch函数以:a)获取当前的第一响应者对象[UIResponder.currentFirstResponder?],两个文本字段之一,并b)指示它退出第一响应者状态[.resignFirstResponder()]。

键盘已被打败。 哎呀!

“我认为,如果您使自己免受黑暗的影响,您将不会欣赏-并充分理解-生活的美丽”-乔科·威林克