如何从 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 中移除,那么即使在我调用 resignFirstResponderendEditing: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 中移除焦点?的主要内容,如果未能解决你的问题,请参考以下文章

WPF:如何以编程方式从 TextBox 中移除焦点

如何从主 QWidget 中移除 QGraphicsTextItem 的焦点

如何从 ScrollView 内的 RecyclerView 中移除焦点?

MVC:如何从日期选择器中移除焦点?

如何在Angular Material Datepicker中从今天的日期中移除焦点?

如何从Tkinter,Python中的Text小部件中移除焦点