即使在呈现模态视图控制器时,如何保持键盘存在?

时间:2011-11-17 02:00:57

标签: iphone objective-c uiviewcontroller modalviewcontroller

我有一个模态视图控制器,并且UITextView成为第一个响应者并显示键盘。

加载此屏幕后,用户可以在提交之前对其输入进行分类。 这是通过顶部显示的另一个模态视图控制器发生的。

当出现第二个键盘时,键盘被解除,用户选择,然后在初始UITextView再次成为第一个响应者时重新出现。

如何在不解除键盘的情况下呈现第二个模态视图控制器?

编辑:我已经实现了部分UITextViewDelegate,但我仍然没有得到理想的结果。

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
    return NO;
}

1 个答案:

答案 0 :(得分:6)

您无法使用presentModalViewController:animated:执行此操作。你必须将你的模态视图放在一个单独的UIWindow中,将第二个UIWindow的windowLevel设置为高(如UIWindowLevelStatusBar),并自己在屏幕上和屏幕上设置动画。您根本不需要第二个视图控制器。

在您的XIB中,创建一个新的顶级UIWindow对象。将第二个视图放入此窗口。将窗口连接到视图控制器上的插座。 (我在测试代码中调用了插座otherWindow,但overlayWindow将是一个更好的名称。插座需要声明为strongretain。)

在视图控制器中,实现以下方法:

- (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;
    }];
}

使用这些来显示和关闭叠加视图。