我也遇到了同样的问题。我不知道如何在您的问题下发表评论(我还是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,则该视图中的所有文本字段都会消失。
我已经为这个问题打开了一个苹果技术支持事件(TSI)。以下是他们在2012年10月12日的回复。
我想给您关于您的事件的更新。感谢您发送您的代码和示例数据库。我已经能够重现这个问题。事实证明,在详细视图控制器中文本字段消失是由于键盘返回无效数据导致您的代码将滚动视图框架设置为无效大小。我正在继续寻找这种意外键盘行为的根本原因,并尽快回信。
我通过显示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”。尺寸值被设为零。
现在我只需要知道这一切的原因。还在研究中,如果苹果有回复,我会告诉你的。到目前为止,这个问题让我感到困惑。
PS...我的iPhone和iPad应用程序在iOS 5中运行正常。
更新-2012年10月17日:
我的键盘问题的原因是由于我错误地实现了iOS 6处理方向的新方法。我已经子类化了我的分割视图控制器,包括以下内容:
- (NSUInteger)supportedInterfaceOrientations {
return [[self splitViewController] supportedInterfaceOrientations]
修改后的代码如下:
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;}
当我向苹果技术支持申报故障时,他们回复了以下内容,指出了我的问题所在:
在SplitController.m文件中,supportedInterfaceOrientations方法调用[[self splitViewController] supportedInterfaceOrientations]并返回接收到的值。但是,由于不允许在其他分割视图控制器中嵌套分割视图控制器,因此分割视图控制器的splitViewController属性为nil。因此,返回的值为0,这是一个无效的方向掩码。
我的应用程序根据堆栈上的视图类型支持不同的方向类型,但我编写的分割视图控制器有误。
苹果技术支持小组给了我很大的帮助。希望这些信息对您有所帮助。
谢谢!