2

我遇到了一个间歇性问题,即键盘不会显示在 UITextField 上。

它发生的次数最多,但不是每次都发生。

我真的无法确定导致它的动作。

我已订阅,UIKeyboardDidShowNotification其中的通知用户数据是:

    0x15581730 {name = UIKeyboardDidShowNotification; userInfo = {
    UIKeyboardAnimationCurveUserInfoKey = 0;
    UIKeyboardAnimationDurationUserInfoKey = "0.25";
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 0}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 568}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 568}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}";
    UIKeyboardFrameChangedByUserInteraction = 0;
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{inf, inf}, {0, 0}}";
    }}

NSRect: {{inf, inf}, {0, 0}}似乎是问题所在,因为当键盘显示时这两个值是有效的。

该应用程序非常标准。这是一个导航堆栈,这发生在堆栈中大约 4 级的视图控制器上。所有文本字段委托都已设置,我看不到视图或控制器的任何其他奇怪之处。

有没有人见过这个?

4

3 回答 3

4

你能记住关于你的应用程序的任何细节吗?我认为这可能与 iOS 6 的方向 API 更改有关。我遇到了同样的问题,并且遭受了一些不直观的定向行为。

具体来说,我的应用程序UIInterfaceOrientationMaskPortraitUp在 Info.plist 和根 UIViewController 的supportedInterfaceOrientations:实现中都指定为唯一允许的方向。我也NO一直shouldAutorotate从我的根 UIViewController 返回。我正在使用 UIDevice 的方向来确定如何呈现我的子 UIViewController 并使用正在呈现的 UIViewController 类型和 UIDeviceOrientation 的函数设置状态栏方向。

这导致了一个相当简单的问题,但在 iPad(这是一个 iPhone 应用程序)上,当从面向横向的启动板启动时,呈现的 UIViewController(和状态栏)将垂直于窗口框架定向,并且不会向后旋转。

它还在 iPhone 3GS 上引起了一些非常奇怪的间歇性方向/窗口框架错误,其中 RootViewController 的框架被赋予了一些比设备大得多的愚蠢尺寸。

我改变了什么(在我的根 UIViewController 中):

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutomaticallyForwardRotationMethods
{
    return NO;
}

我也不再使用设备方向来确定正确的方向,仅依赖于呈现的 UIViewController 类(由导航决定)。这具有解决简单的 iPad 方向错误的预期效果,但我没有看到奇怪的间歇性错误或您也遇到的键盘错误的实例。

于 2013-04-04T16:57:19.033 回答
0

你在 iOS 5.x 模拟器上使用DCIntrospect吗?我遇到了同样的问题,发现错误的UIKeyboardFrameBeginUserInfoKey值是由 DCIntrospect 引起的。UIKeyboardWillHideNotificationDCIntrospect 可能会在收到通知时尝试更改第一响应者。见代码:

- (void)takeFirstResponder
{
    if (![self.inputTextView becomeFirstResponder])
        NSLog(@"DCIntrospect: Couldn't reclaim keyboard input.  Is the keyboard used elsewhere?");
}

通常,我们永远不应该在发布版本上启用 DCIntrospect。所以最终用户不应该遇到这个问题。

于 2013-08-26T08:38:36.903 回答
-1

@interface UIController : UIViewController<UITextFieldDelegate>

并从 Xib 将数据委托分配给您的 UITextfield ..

于 2013-03-19T14:14:31.553 回答