在 ModalView 中丢失 firstResponder

Posted

技术标签:

【中文标题】在 ModalView 中丢失 firstResponder【英文标题】:Losing firstResponder in ModalView 【发布时间】:2012-01-31 15:22:21 【问题描述】:

我有下一个行为:

    UIView (A) 有 subView (B) 子视图 B 具有带有操作的按钮 SubView 的 B 操作之一打开带有 textField (T) 的 ModalView (M)。 单击 ModalView (M) 上的 textField (T) 会打开 UIKeyboard,但 ModalView (M) 上的 UitextField (T) 不再是此 UiKeyboard 的 firstResponder 并且键盘不会接收任何用户输入。

只有 UIKeyBoardWillShowNotification 正在调用。 另外,UIKeyBoardDidShowNotification 没有在这个 ModalView 中调用...

我该如何解决?我知道我必须以某种方式将响应者移回此 UitextField (T),但如何?

【问题讨论】:

【参考方案1】:

这似乎是非常奇怪的行为。你试过什么?无法解释为什么会这样做,但解决方案可以像

[T becomeFirstResponder]

??

【讨论】:

是的,在这里尝试过:
 -(void)keyboardWillShow:(NSNotification *) n  [self.textView becomeFirstResponder]; for (UIView *v in [self.view subviews])  if ([v isFirstResponder])  NSLog(@"Yes, textView is firstResponder. %@", v);    <pre>
是的,在UIKeyboardWillShowNotification-(void) sss:(NSNotification *) n //[self.textView becomeFirstResponder]; for (UIView *v in [self.view subviews]) if ([v isFirstResponder]) NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!! %@", v); NSLog(@"keyboard will show"); 尝试过【参考方案2】:

试试这样的...

[M resignFirstResponder]
[M setTarget:nil]
[T becomeFirstResponder]

【讨论】:

问题已解决。我必须在父 UiViewController 中添加 `[[NSNotificationCenter defaultCenter] removeObserver:self];`,因为它也有 UITextField 并且它正在 ModalView 中捕获 UIKeyboardDidSHownNotification。

以上是关于在 ModalView 中丢失 firstResponder的主要内容,如果未能解决你的问题,请参考以下文章

应用程序委托中的 TabBased 应用程序 + modalview

Dismiss ModalView 在这里不起作用

呈现的 ModalView 显示在自定义视图中,从中调用它

modalview 关闭后 TableView 未重新加载

从 MasterViewController 呈现的 ModalView 在 iOS 5.1 中不再是全屏

当 UITextField 在 modalView 中有第一响应者时,UINavigationController 堆栈错误