我有一个 UIViewController,然后使用这段代码我提供了一个用于输入密码的模态视图 Controller 。
[self performSegueWithIdentifier:@"SeguePassword" sender:self];
在 Storyboard中:
Storyboard转折 标识符 = Segue 密码 样式 = 模态 过渡 = 默认 动画 = 未选中
当我在具有以下代码的模式上单击“取消”时:
[self dismissViewControllerAnimated:NO completion:^{}];
现在当我回来时,键盘是隐藏的。我有代码来显示一个工具栏,该工具栏带有一个名为隐藏的按钮。我看到了,但没有看到键盘。
有没有人有任何想法或指示来解决这样的问题?它似乎是最近在转换 iOS 7 的更改后开始的。
我的解决方案:
我发现这个是因为在我出于挫败感点击警告框上的 but 几次后,我看到键盘方向错误。即,当应用程序仅在 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);**
}
我将 Portrait 更改为使用 Mask 整数,然后一切又开始工作了。
最佳答案
键盘仅在某些对象是 firstResponder 时可见。查看 UIResponder 类的文档。
如果您的模态视图 Controller 使用键盘(听起来确实如此),它会获得第一响应者状态,并且原始屏幕上的任何内容都会丢失。如果你想从模态视图 Controller 返回到相同的状态,一些对象具有输入焦点——即成为 firstResponder——并且键盘可见,你将必须编写代码来实现这一点。特别是,您的原始 View Controller 必须知道模态视图 Controller 何时终止,以便它可以使您的输入对象、textField 或 textView 或其他任何对象成为第一响应者并声明:
[objectIWantToBeFirstResponder becomeFirstResponder];
现在你怎么知道模态视图 Controller 什么时候完成了? 有几个明显的技巧。
如果你想使用 segue 那么模态视图 Controller 将不得不 明确地让呈现 View Controller 知道它是 终止。您可能希望在 模态视图 Controller 并让呈现 View Controller 采用 它。当模态视图 Controller 想要退出时,它首先告诉呈现 View Controller 。
因为你可能手动触发了转场 您愿意在代码中呈现模态视图 Controller 。如果是这样的话 您可以使用完成 block :
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];
}];
关于ios - 从 ModalViewController 返回后键盘没有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682185/