我有一个模态视图控制器,并且UITextView成为第一个响应者并显示键盘。
加载此屏幕后,用户可以在提交之前对其输入进行分类。 这是通过顶部显示的另一个模态视图控制器发生的。
当出现第二个键盘时,键盘被解除,用户选择,然后在初始UITextView再次成为第一个响应者时重新出现。
如何在不解除键盘的情况下呈现第二个模态视图控制器?
编辑:我已经实现了部分UITextViewDelegate,但我仍然没有得到理想的结果。
- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
return NO;
}
答案 0 :(得分:6)
您无法使用presentModalViewController:animated:
执行此操作。你必须将你的模态视图放在一个单独的UIWindow中,将第二个UIWindow的windowLevel设置为高(如UIWindowLevelStatusBar),并自己在屏幕上和屏幕上设置动画。您根本不需要第二个视图控制器。
在您的XIB中,创建一个新的顶级UIWindow对象。将第二个视图放入此窗口。将窗口连接到视图控制器上的插座。 (我在测试代码中调用了插座otherWindow
,但overlayWindow
将是一个更好的名称。插座需要声明为strong
或retain
。)
在视图控制器中,实现以下方法:
- (IBAction)presentOverlay:(id)sender
{
CGRect frame = [UIScreen mainScreen].applicationFrame;
frame.origin.y += frame.size.height;
self.otherWindow.frame = frame;
self.otherWindow.windowLevel = UIWindowLevelStatusBar;
self.otherWindow.hidden = NO;
[UIView animateWithDuration:.25 animations:^{
self.otherWindow.frame = [UIScreen mainScreen].applicationFrame;
}];
}
- (IBAction)dismissOverlay:(id)sender
{
[UIView animateWithDuration:.25 animations:^{
CGRect frame = [UIScreen mainScreen].applicationFrame;
frame.origin.y += frame.size.height;
self.otherWindow.frame = frame;
} completion:^(BOOL completed){
self.otherWindow.hidden = YES;
}];
}
使用这些来显示和关闭叠加视图。