如何从 UITextField 中移除焦点?
Posted
技术标签:
【中文标题】如何从 UITextField 中移除焦点?【英文标题】:How to remove focus from UITextField? 【发布时间】:2016-03-24 04:34:57 【问题描述】:我已经看到这个问题在各地被问了数百万次,但没有一个对我有用的答案。
我需要从 UITextField 中移除焦点。这意味着我需要光标消失(并且键盘被关闭)。
我在网上看到的解决方案是[textfield resignFirstResponder]
或者[textfield endEditing:YES]
,它可以隐藏键盘,但不会从UITextField中移除焦点(即光标在UITextField中仍然愉快地闪烁,虽然键盘被关闭)。
当用户点击 UITextField 并且触发事件 didBeginEditing 时,我需要获取事件。每次触发该事件时,或者更一般地说,每次用户点击 UITextField 时,我都会做一些事情。但是,如果焦点没有完全从 UITextField 中移除,那么即使在我调用 resignFirstResponder
或 endEditing:YES
之后,也无法再次触发该事件。
我怎样才能做到这一点?谢谢。
【问题讨论】:
尝试让其他东西成为第一响应者,也许只是视图控制器的基本视图 您的键盘已停用,只有光标可用 @Fonix 我已经尝试将 textfield.superView 设置为 firstresponder,但它没有帮助。另一个指南告诉我需要将 firstresponder 设置为另一个文本字段。但我没有任何其他文本字段。我在屏幕上只有一个文本字段,还有其他组件,但除了文本字段之外,没有其他组件可以成为第一响应者。 【参考方案1】:您可以将光标颜色设置为清晰的颜色
textfeild.tintColor = UIColor.clearColor()
如果你只是想关闭键盘,那么
textfeild.resignFirstResponder()
将关闭键盘,当您想要再次聚焦时使用
textfeild.becomeFirstResponder()
【讨论】:
这无济于事,因为我不想只是关闭键盘。我希望文本字段也能移除焦点。将光标设置为 clearcolor 也无济于事,因为光标仍然在那里。如果文本字段仍处于焦点状态,则 becomeFirstResponder 也不会触发 didBeginEditing 事件。当用户点击文本字段时,我需要触发 didBeginEditing 事件,但如果我不能使文本字段失去焦点,则无法第二次触发该事件。 -(BOOL) textFieldShouldReturn:(UITextField *)textField [textField resignFirstResponder];返回是;试试这个,我的案例 cusor 没有出现,也将委托设置为 self【参考方案2】:很久以前我也遇到过同样的问题。
我有一个包含UITextField
和其他一些控件的屏幕,其中一些控件出现在屏幕键盘下方(是的,我现在知道我应该使用约束来确保onscreen UIView
适合屏幕的可见部分)。
在我的情况下,问题是在模态屏幕上,一旦屏幕键盘出现,您就永远无法摆脱它,即使您尝试使用resignFirstResponder
。在其智慧中,Apple 故意将其设计为这样,以防止用户因键盘出现和消失而烦恼。嗯嗯。
我的解决方案很简单:
将您的UITextField
禁用。即使只是一瞬间,您也可以重新启用它。
这将使屏幕键盘很好地滑开。
【讨论】:
【参考方案3】:如果您只需要检测文本字段何时被触摸而不是特别是didBeginEditing
,为什么不直接创建 UITextField 的子类并像这样覆盖touchesBegan
class SpecialTextField: UITextField
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
print("touched textfield")
然后您可以使用它通过委托方法或直接以某种方式触发您的事件
【讨论】:
以上是关于如何从 UITextField 中移除焦点?的主要内容,如果未能解决你的问题,请参考以下文章
如何从主 QWidget 中移除 QGraphicsTextItem 的焦点
如何从 ScrollView 内的 RecyclerView 中移除焦点?