我有一个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);**
}
}
我更改了肖像以使用蒙版整数,一切都重新开始工作。
答案 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];
}];