4

我一直无法解决为什么我的应用程序中的键盘部分出现在屏幕上或根本不出现。它只是一个简单的视图控制器;

[self presentViewController:vc_browser animated:YES completion:^{}];

我第一次展示它,一切正常。然后我将其关闭

[self dismissModalViewControllerAnimated:NO];

当再次(和进一步)展示这个 $#%! 发生。从通知中登录键盘框架

2012-12-30 00:40:21.618 测试 [12080:907] 键盘框架原始 {{160, 443}, {0, 44}}

2012-12-30 00:40:21.619 测试 [12080:907] 键盘框架转换 {{320, 886}, {0, 88}}

2012-12-30 00:40:21.836 测试 [12080:907] 键盘框架原始 {{0, 524}, {320, 44}}

2012-12-30 00:40:21.837 测试 [12080:907] 键盘框架转换 {{0, 1048}, {640, 88}}

在下图中,焦点在 webView 内部(实际上是 google 搜索字段)

如果我将焦点移到键盘矩形上方的文本字段,则记录为 {{inf, inf}, {0, 0}}

viewWillAppear 和 viewDidAppear 没有实现

呈现的视图控制器以这种方式加载

_vc = [[VC alloc] initWithNibName:@"VC" bundle:nil];

我尝试从其他 xib 或其他情节提要加载此视图控制器,但问题仍然存在。

解决这个问题的任何帮助都会很棒。谢谢。

http://i.stack.imgur.com/xBNZt.png

无法发布代表 < 10 的图像

4

1 回答 1

4

我也有同样的问题。我不知道如何对您的问题发表评论(我还是 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 技术支持小组对我帮助很大。希望这些信息对您有所帮助。

干杯!

于 2012-10-17T03:34:26.673 回答