从ModalViewController返回后键盘不出现

时间:2014-02-10 16:10:43

标签: ios iphone objective-c uiviewcontroller modalviewcontroller

我有一个UIViewController,然后使用此代码我提供了一个用于输入密码的模态视图控制器。

[self performSegueWithIdentifier:@"SeguePassword" sender:self];
在故事板中

故事板Segue Identifier = SeguePassword 风格=模态 转换=默认 Animates =未选中

当我在具有以下代码的模态上单击“取消”时:

[self dismissViewControllerAnimated:NO completion:^{}];

现在当我回来时,键盘被隐藏了。我有代码显示一个工具栏,其中包含一个名为hide的按钮。我看到了,但不是键盘。

有没有人有任何想法或指示来解决这样的问题?它似乎最近在转换iOS 7的更改后开始。

我的解决方案:

我发现这是因为在我沮丧地点击警告框几次后,我看到键盘方向错误。即,当应用程序仅在iPhone上是纵向时,横向键盘。

在:

- (NSUInteger) supportedInterfaceOrientations {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
} else {
    **return (UIInterfaceOrientationPortrait);**
}

}

后:

- (NSUInteger) supportedInterfaceOrientations {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
} else {
    **return (UIInterfaceOrientationMaskPortrait);**
}

}

我更改了肖像以使用蒙版整数,一切都重新开始工作。

1 个答案:

答案 0 :(得分:0)

只有当某个对象是firstResponder时,键盘才可见。查看UIResponder类的文档。

如果您的模态视图控制器使用键盘,它听起来就像它一样,它需要第一响应者状态,原始屏幕上的任何内容都会丢失它。如果你想从模态视图控制器返回相同的状态,一些对象具有输入焦点 - 即作为第一个响应者 - 键盘可见,你将不得不有写代码来实现这一点。特别是,您的原始视图控制器必须知道模态视图控制器何时终止,以便它可以使您的输入对象textField或textView或其他任何一个成为具有该语句的第一个响应者:

   [objectIWantToBeFirstResponder becomeFirstResponder];

现在你怎么知道模态视图控制器何时完成? 有几种明显的技术。

如果你想使用segue,则模态视图控制器必须这样做 明确地让呈现视图控制器知道它是 终止。您可能希望在中定义协议 模态视图控制器并具有呈现视图控制器采用 它。当模态视图控制器想要退出时,首先告诉演示 查看控制器。

因为您可能手动触发segue 你愿意在代码中呈现模态视图控制器。如果是的话 你可以使用完成块:

   ModalViewControllerClass *vc = [[ModalViewControllerClass alloc] init];
   // whatever else you need to do to the vc
    [self presentViewController:vc animated:YESorNO completion:^{
        // This code gets executed when the presented view controller exits
        [objectIWantToBeFirstResponder becomeFirstResponder];
    }];