我有一个UIViewController
的视图,其UITextField
为子视图。文本字段在UIControlEventEditingDidBegin
上实现了一个事件。此事件设置文本字段的inputAccessoryView
,并在视图控制器的视图上添加“阴影”视图,以阻止与视图的交互。
inputAccesoryView
是UIView
,其中UITextView
为子视图。当键盘显示(UITextView
上注册)时,firstResponder
设置为UIKeyboardDidShowNotification
。
触摸“阴影”视图时,请调用以下方法:
-(void)dismissKeyboard
{
self.dimScreenView.alpha = 0.0f;
self.writingView.txtView.text = @"";
[self.writingView.txtView resignFirstResponder];
}
但触摸阴影视图时键盘不会消失。我试过调用[self.writingView.txtWritingField endEditing:YES]
和[self.writingView endEditing:YES]
,但我无法使其正常工作。
当inputAccessoryView
有子视图时,我应该做些特别的事情让键盘消失,即firstResponder
吗?
更新
事实证明,UITextView
和UITextField
都会在NO
属性上返回isFirstResponder
,即使我没有调用resignFirstResponder
。当键盘仍然存在时,怎么没有文本视图firstResponder
?
答案 0 :(得分:1)
[self.writingView.txtView resignFirstResponder];
之后,你的UITextField
再次成为第一个响应者。所以你应该添加代码让UITextField
辞职第一响应者:
-(void)dismissKeyboard
{
self.dimScreenView.alpha = 0.0f;
self.writingView.txtView.text = @"";
[self.writingView.txtView resignFirstResponder];
[yourTextField resignFirstResponder];
}
答案 1 :(得分:0)
您提到UITextView
设置为firstResponder
,但在代码中您将resignFirstResponder
传递给textField实例。尝试在textview实例上调用resignFirstResponder
。
答案 2 :(得分:0)
在 [self.writingView.txtView resignFirstResponder];
你的textField再次成为第一个响应者,键盘在屏幕上,前一个inputAccessoryView停留在textView上。所以你只需要重新加载它:
-(void)dismissKeyboard
{
self.dimScreenView.alpha = 0.0f;
self.writingView.txtView.text = @"";
[self.writingView.txtView resignFirstResponder];
self.textField.inputAccessoryView = nil;
[self.textField reloadInputViews];
}
通过这种方式,您可以隐藏inputAccessoryView,但是您需要另一种方法使其成为第一个响应者,因为焦点会立即移动到textField。