我也有同样的问题。我不知道如何对您的问题发表评论(我还是 Stack Overflow 的新手),所以我提供了迄今为止我发现的部分答案。仍在研究完整的解决方案。
使用 Xcode 4.5.1,我的应用程序使用 iOS 6。这是一个使用 Core Data 的通用应用程序,iPhone 端运行良好。iPad 端是拆分视图。从细节视图控制器,用户可以在拆分视图上打开一个完整的窗口来显示照片。关闭照片视图会将您返回到拆分视图。
下面是关于如何调用和关闭照片浏览器的代码。
[self presentViewController:photoBrowser animated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
照片视图消失后是我遇到键盘问题的时候。
症状:具有 UITextFields 或 UITextViews 的后续视图不再自动显示键盘或键盘仅部分显示,如您的照片示例中所示。我使用 becomeFirstResponder 调出键盘。
[self.noteEdit becomeFirstResponder];
奇怪的是,如果我触及任何 UITextField,那么该视图中的所有文本字段都会消失。
我已针对此问题打开 Apple 技术支持事件 (TSI)。这是他们在 2012 年 10 月 12 日的回复。
我想向您介绍您的事件的最新情况。感谢您发送代码和示例数据库。我已经能够重现该问题。事实证明,细节视图控制器中消失的文本字段是键盘返回 UIKeyboardFrameEndUserInfoKey 无效数据的结果,导致您的代码将滚动视图框架设置为无效大小。我将继续寻找这种意外键盘行为的根本原因,并在我得到答案后立即回信。
我通过显示 UIKeyboardFrameEndUserInfoKey userInfo 值验证了他的回复。
NSLog(@"keyboardEndFrame orig.x=%f orig.y=%f size.w=%f, size.h=%f",
keyboardEndFrame.origin.x, keyboardEndFrame.origin.y, keyboardEndFrame.size.width, keyboardEndFrame.size.height);
果然,原点 x 和 y 的值都是“inf”。大小值设置为零。
现在我只需要知道这一切的原因。仍在研究中,但我会随时向您发布任何 Apple 的回复。到目前为止,这让我很难过。
PS...我的应用程序(iPhone 和 iPad)在 iOS 5 中运行良好。
更新 - 2012 年 10 月 17 日:
我的键盘问题的原因是我在实现 iOS 6 处理方向的新方式时出错。我将拆分视图控制器子类化为包括以下内容:
- (NSUInteger)supportedInterfaceOrientations {
return [[self splitViewController] supportedInterfaceOrientations];}
更正后的代码是:
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;}
当我的 Apple 技术支持事件回复以下内容时,有人向我指出了这一点:
我已经找到了您的键盘问题的根本原因。在SplitController.m中,方法supportedInterfaceOrientations调用:[[self splitViewController]supportedInterfaceOrientations]; 并返回收到的值。但是,拆分视图控制器的 splitViewController 属性为零,因为不允许拆分视图控制器内部其他拆分视图控制器。因此,返回值为 0,这是一个无效的方向掩码。
我的应用程序根据堆栈顶部的视图支持不同的方向类型,但我错误地编码了拆分视图控制器。
Apple 技术支持小组对我帮助很大。希望这些信息对您有所帮助。
干杯!