当它已经可见时关闭键盘
Posted
技术标签:
【中文标题】当它已经可见时关闭键盘【英文标题】:Close Keyboard when it's already visible 【发布时间】:2016-05-20 08:49:30 【问题描述】:当我有超过 1 个 UITextField 时,我无法关闭键盘。
我有 2 个 TextField :TextField1
和 TextField2
,我给他们每个标签 1
和 2
我想让如果标签等于 2,那么它会隐藏键盘,如果我触摸标签等于 1 的文本字段,则键盘再次可见,这适用于我的代码,但是当我将其转回时,代码不会像我一样想要,我先触摸TextField1
然后TextField2
键盘仍然可见且没有隐藏
我的代码是这样的
func textFieldDidBeginEditing(textField: UITextField)
if (textField.tag == 2)
self.view.endEditing(false)
textField.resignFirstResponder()
else
self.view.endEditing(true)
我也尝试使用像 Editing Did Begin
和 Editing Changed
这样的事件,但不能像我想要的那样做
请帮助我如何在键盘已经可见时隐藏它
【问题讨论】:
您为什么要辞去第一响应者的职务或在开始编辑委托方法中结束编辑?这不会导致永远无法输入文字吗? @jrturton 我想要当我触摸我的 TextField2 时它仍然有闪烁的光标但没有显示键盘 这是为什么呢?用户还有其他方法可以将文本输入文本字段吗? 参考@simplebob 答案。这就是你的问题的解决方案。 self.view.endEditing(false) 永远不会关闭键盘。 【参考方案1】:试试这个:
func textFieldDidBeginEditing(textField: UITextField)
if (textField.tag == 2)
self.view.endEditing(true)
else
textField.becomeFirstResponder()
self.view.endEditing(true)
不会显示键盘,它实际上会尝试隐藏它,迫使第一响应者辞职。
【讨论】:
【参考方案2】:您也可以使用下面的文本字段委托方法,
func textFieldShouldReturn(textField: UITextField) -> Bool
if (textField == self.TextField1)
self.TextField2.becomeFirstResponder()
else
textField.resignFirstResponder()
self.view.endEditing(true)
return true
希望这会对你有所帮助。
【讨论】:
【参考方案3】:我认为你没有在这个类上设置 UITextFieldDelgate,所以在 viewDidLoad() 中
override func viewDidLoad()
TextField1.delegate = self
TextField2.delegate = self
然后像这样添加 textFieldDidBeginEditing :-
func textFieldDidBeginEditing(textField: UITextField)
if (textField.tag == 2)
self.view.endEditing(true)
else
textField.becomeFirstResponder()
【讨论】:
【参考方案4】:试试下面的代码。
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
if(textField.tag == 2)
[[self.view viewWithTag:1] resignFirstResponder];
return false;
else
return true;
【讨论】:
我写代码的时候打错了,代码已经和2比较标签了以上是关于当它已经可见时关闭键盘的主要内容,如果未能解决你的问题,请参考以下文章