iOS 编程:更详细地了解第一响应者
Posted
技术标签:
【中文标题】iOS 编程:更详细地了解第一响应者【英文标题】:iOS programming: understand in more detail about first responder 【发布时间】:2020-04-27 13:20:30 【问题描述】:我有一个带有文本字段和按钮的 ios 项目。单击文本字段使其成为第一响应者并调用键盘。然后当我点击按钮时,键盘仍然在屏幕上,文本字段仍然是第一个响应者。很自然的想法,点击按钮应该让它成为第一响应者并强制提交的文本退出,但是为什么这个过程在 Xcode 中没有发生呢? 如果我的应用程序有 2 个按钮 A 和 B,单击 A 会使其成为第一响应者吗?然后点击 B 之后会让 B 成为第一响应者并且 A 会辞职吗?
【问题讨论】:
【参考方案1】:第一响应者是当前准备响应操作的任何控件。
在 UIKit 中,这通常是激活键盘并接收输入的控件。如果您希望该文本控件停止等待输入(进而关闭键盘),则应调用其 resignFirstResponder() 方法,该方法将第一响应者指挥棒传递给下一个等待组件。
在你的情况下,如果你想关闭键盘,你可以做两件事:
-
可以调用文本域的resignFirstResponder()
在按钮的 IBAction 中,您可以写
self.view.endEditing(true)
,这将为您关闭键盘。
如果您有任何问题,请发表评论。
乐于助人!
【讨论】:
【参考方案2】:如果您来自其他环境(例如桌面浏览器上的网页),您可以从一个元素“切换”到另一个元素,为每个元素赋予“焦点”。
在 iOS 中,UI 元素没有这种“焦点”状态。
例如,如果您点击UITextField
或UITextView
,该对象将变为firstResponder
,并且因为它接受键盘输入,所以会显示键盘。 UIButton
不默认启用canBecomeFirstResponder
,并且不接受键盘输入。
这就是为什么点击按钮不会关闭键盘 - 或“将焦点从文本字段中移开”。
您可以子类化UIButton
以赋予它这些属性,或者,如另一个答案所示,添加代码以将文本字段告知resignFirstResponder
,但这不是默认行为。
【讨论】:
以上是关于iOS 编程:更详细地了解第一响应者的主要内容,如果未能解决你的问题,请参考以下文章