【问题标题】:How can I keep the keyboard present even when presenting a modal view controller?即使呈现模态视图控制器,如何保持键盘存在?
【发布时间】:2011-12-30 23:09:24
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你实现UITextViewDelegate了吗?在许多情况下,人们忘记了这个代表。
  • @ShivanRaptor 查看我的更新 - 我已经实现了一种方法。

标签: iphone objective-c uiviewcontroller modalviewcontroller


【解决方案1】:

您无法使用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;
    }];
}

使用这些来呈现和关闭覆盖视图。

【讨论】:

  • 第二个视图控制器不涉及使用键盘。我希望第一个视图中的键盘保持弹出状态,即使另一个视图控制器以模态方式存在于它之上。
  • 我不明白你在问什么我的答案没有提供(尽管我没有提到你需要你的第二个视图控制器来定义方法 canBecomeFirstResponder 以返回 YES)。当我以模态方式呈现视图控制器时,我的测试用例会弹出键盘。
  • 请再次阅读我的评论 - 第二个控制器不涉及使用键盘(它是一个大约 10 个项目的表格视图)。 tableview 占据整个屏幕,并在选择一行时关闭。此控制器消失后,它应该会下降以在第一个从未关闭的视图中显示键盘。
  • 一旦我将 UIWindow 添加到我的 XIB 并实现此方法 - 显示第二个窗口,即使在第一个屏幕上也是如此
  • viewDidLoad中设置self.otherWindow.hidden=YES
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多