Ios 从ModalViewController返回后键盘不出现
我有一个UIViewController,然后用这段代码我提供了一个用于输入密码的模式视图控制器Ios 从ModalViewController返回后键盘不出现,ios,iphone,objective-c,uiviewcontroller,modalviewcontroller,Ios,Iphone,Objective C,Uiviewcontroller,Modalviewcontroller,我有一个UIViewController,然后用这段代码我提供了一个用于输入密码的模式视图控制器 [self performSegueWithIdentifier:@"SeguePassword" sender:self]; 在故事板中: 情节提要 标识符=SeguePassword 样式=模态 转换=默认值 设置动画=未选中 当我在具有以下代码的模式上单击“取消”时: [self dismissViewControllerAnimated:NO completion:^{}]; 现在当我回
[self performSegueWithIdentifier:@"SeguePassword" sender:self];
在故事板中:
情节提要
标识符=SeguePassword
样式=模态
转换=默认值
设置动画=未选中
当我在具有以下代码的模式上单击“取消”时:
[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);**
}
}
我将肖像更改为使用掩码整数,然后一切又开始工作。只有当某个对象是第一响应者时,键盘才可见。查看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];
}];
您是否使用过
UIKeyboardWillShow/HideNotification
?我使用了textBegingEdit协议,它第一次在登录页面上工作正常,键盘也会显示在模式密码窗口中。但是,当我关闭密码时,键盘不再显示,尽管连接到键盘的工具栏会显示。如果我通过在笔记本电脑键盘上键入来登录并注销,它会再次正常工作。将UIInterfaceOrientationGrait
更改为UIInterfaceOrientationMaskPortrait
也为我解决了这个问题。感谢您花时间回答这个问题。这不起作用,但我正在分析代码以找到一个漏洞。好吧,当我回到我在视图中尝试的原始视图时,出现了对[self becomeFirstResponder]的调用,因为我不希望键盘显示在他们点击文本框的下方。尽管键盘没有显示,但我用一个空白id单击了“登录”,UIAlertBox在横向视图中显示了键盘的一半,而iPhone版本的键盘则始终处于纵向。实际原因是因为我支持的界面方法,我返回到了我的segue。一切都很好。因为你在回答上做得很好,技术上它回答了我的问题,所以我给你答案。查看我的答案以查看我为解决此问题而替换的代码。