如何从UITextField中删除焦点?

时间:2016-03-24 04:34:58

标签: ios objective-c uitextfield

我已经看到这个问题到处都有数百万次问题,但是没有单一的答案对我有用。

我需要从UITextField中删除焦点。这意味着我需要光标消失(并且键盘被解除)。

我在互联网上看到的解决方案是[textfield resignFirstResponder][textfield endEditing:YES],它可以隐藏键盘,但不会从UITextField中移除焦点(即光标仍然快乐地闪烁在UITextField内部,虽然键盘被解除了。)

这个问题是当用户点击UITextField并触发事件didBeginEditing时,我需要获取事件。我每次触发该事件时都会做某事,或者更常见的是,每次用户点击UITextField时都会这样做。但是,如果没有完全从UITextField中移除焦点,则即使在我调用resignFirstResponderendEditing:YES之后也无法再次触发该事件。

我怎样才能做到这一点?感谢。

3 个答案:

答案 0 :(得分:2)

很久以前我遇到了同样的问题。

我有一个包含UITextField的屏幕,以及其他一些控件,其中一些在屏幕键盘上显示 我知道现在我应该使用约束来制作确保屏幕UIView符合屏幕的可见部分。

在我的情况下,问题是在模态屏幕上,一旦屏幕键盘出现,即使您尝试使用resignFirstResponder,也可以从不摆脱它。凭借其智慧,Apple特意设计了这种方式,以阻止用户因键盘出现而烦恼,并消失。嗯。

我的解决方案很简单:

禁用UITextField 。即使只是几分之一秒,然后你重新启用它。

这会让屏幕键盘很好地滑开。

答案 1 :(得分:1)

你可以将cusor颜色变成清晰的颜色

  textfeild.tintColor = UIColor.clearColor()

如果你只是想解雇键盘那么

    textfeild.resignFirstResponder()

将关闭键盘,当您想再次使用焦点时

 textfeild.becomeFirstResponder()

答案 2 :(得分:0)

如果您只是需要检测文本字段何时被触及而不是didBeginEditing,那么为什么不只是创建UITextField的子类并覆盖touchesBegan,如此

class SpecialTextField: UITextField {
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("touched textfield")
    }
}

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