我已经看到这个问题到处都有数百万次问题,但是没有单一的答案对我有用。
我需要从UITextField中删除焦点。这意味着我需要光标消失(并且键盘被解除)。
我在互联网上看到的解决方案是[textfield resignFirstResponder]
或[textfield endEditing:YES]
,它可以隐藏键盘,但不会从UITextField中移除焦点(即光标仍然快乐地闪烁在UITextField内部,虽然键盘被解除了。)
这个问题是当用户点击UITextField并触发事件didBeginEditing时,我需要获取事件。我每次触发该事件时都会做某事,或者更常见的是,每次用户点击UITextField时都会这样做。但是,如果没有完全从UITextField中移除焦点,则即使在我调用resignFirstResponder
或endEditing:YES
之后也无法再次触发该事件。
我怎样才能做到这一点?感谢。
答案 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")
}
}
然后您可以使用它通过委托方法触发您的事件,或者直接以某种方式