在 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
从 MasterViewController 呈现的 ModalView 在 iOS 5.1 中不再是全屏
当 UITextField 在 modalView 中有第一响应者时,UINavigationController 堆栈错误