Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从ModalViewController返回后键盘不出现_Ios_Iphone_Objective C_Uiviewcontroller_Modalviewcontroller - Fatal编程技术网

Ios 从ModalViewController返回后键盘不出现

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:^{}]; 现在当我回

我有一个UIViewController,然后用这段代码我提供了一个用于输入密码的模式视图控制器

[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。一切都很好。因为你在回答上做得很好,技术上它回答了我的问题,所以我给你答案。查看我的答案以查看我为解决此问题而替换的代码。