【问题标题】:How to remove focus from UITextField?如何从 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 设置为另一个文本字段。但我没有任何其他文本字段。我在屏幕上只有一个文本字段,还有其他组件,但除了文本字段之外,没有其他组件可以成为第一响应者。

标签: ios objective-c uitextfield


【解决方案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")
        }
    }
    

    然后您可以使用它通过委托方法或直接以某种方式触发您的事件

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2016-10-17
      • 2011-01-27
      相关资源
      最近更新 更多