inputAccessoryView中的UITextView将不会resignFirstResponder

时间:2014-02-03 08:20:23

标签: ios iphone objective-c first-responder

我有一个UIViewController的视图,其UITextField为子视图。文本字段在UIControlEventEditingDidBegin上实现了一个事件。此事件设置文本字段的inputAccessoryView,并在视图控制器的视图上添加“阴影”视图,以阻止与视图的交互。

inputAccesoryViewUIView,其中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吗?

更新

事实证明,UITextViewUITextField都会在NO属性上返回isFirstResponder,即使我没有调用resignFirstResponder。当键盘仍然存在时,怎么没有文本视图firstResponder

3 个答案:

答案 0 :(得分:1)

像@malex说的那样,在[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。